是典型的回溯問題惨远,不過做這個題目翰守,花了周日一天的時間孵奶,這一天時間,大部分時間都在思考出現(xiàn)問題的原因蜡峰。這里也通過leetcode的提交記錄了袁,來回顧下做這題的心路歷程,順別加深對此類問題的求解湿颅。
在第一次解答载绿,沒有沿用之前的思路,只想到了遞歸油航,對于遞歸之外的問題模糊不清崭庸,就提筆了,結果可想而知谊囚,前后碰壁怕享,在leetcode上甚至沒有通過第一個測試用例。主要問題是對遞歸的思想還是不清晰镰踏,對參數的了解還是理解的不夠透徹函筋。客觀評價奠伪,甚至是沒有遞歸的影子跌帐。
- 很明顯的首懈,對于這類需要輸出每個解的題目,都需要遞歸調用最后的結果參數谨敛,并且在golang中究履,這個參數必須是個指針;
- 其次是單次的結果佣盒,對于golang來說挎袜,這個也是很重要的,每個單次的結果肥惭,不能直接在結果上進行append盯仪,這中操作發(fā)生了很多次,造成的結果就是每次產生結果都是一致的蜜葱;
- 最后全景,對于每次結果的輸入和輸出,都需要保持前后一次性牵囤,拿本題距離爸黄,放置一枚棋子,必然需要標記改換后影響的各個位置揭鳞,遍歷結束之后炕贵,收起此枚皇后,又需要還原此次產生的影響野崇。
以上這三個點都是在遞歸問題中称开,必須每次嚴格的遵守的。
今天的皇后問題乓梨,就是在這之上鳖轰,花費了太多的時間,做了很多無用功扶镀。
當然蕴侣,N皇后問題也有它的難點,個人認為應該將時間都花在這些問題的處理上臭觉,而不是上面那些有實際模板的問題上昆雀。N皇后的問題難點就在于剪枝問題的處理上,對于剪枝問題上蝠筑,筆者啟先忆肾,簡單的使用二維數組,簡單的使用皇后規(guī)則菱肖,落子添加標記,起子刪除標記旭从,可是這明顯存在bug稳强,最后看了題解场仲,處理方法是分別記錄橫豎,對角線這四個維度的標記退疫。
今天是血淚教訓的一天渠缕,下周繼續(xù),將挑戰(zhàn)新的題目褒繁,依然是遞歸類型的亦鳞。