下面提供一些我做過的「回溯」演算法的問題,以便大家學習和理解「回溯」演算法。
全排列(中等)
全排列 ii(中等):思考為什麼造成了重複,如何在搜尋之前就判斷這一支會產生重複;
組合總和(中等)
組合總和 ii(中等)
組合(中等)
子集(中等)
子集 ii(中等):剪枝技巧同 47 題、39 題、40 題;
第 k 個排列(中等):利用了剪枝的思想,減去了大量枝葉,直接來到需要的葉子結點;
復原 ip 位址(中等)
下面這幾個問題,思想不難,但是初學的時候**很不容易寫對,並且也很難除錯。我們的建議是多寫幾遍,忘記了就再寫一次,參考規範的編寫實現(設定 visited 陣列,設定方向陣列,抽取私有方法),把**寫對。
影象渲染(flood fill,中等)
島嶼數量(中等)
被圍繞的區域(中等)
單詞搜尋(中等)
說明:以上問題都不建議修改輸入資料,設定 visited 陣列是標準的做法。可能會遇到引數很多,是不是都可以寫成成員變數的問題,面試中拿不準的記得問一下面試官
**號碼的字母組合(中等),題解;
字母大小寫全排列(中等);
括號生成(中等) :這道題廣度優先遍歷也很好寫,可以通過這個問題理解一下為什麼回溯演算法都是深度優先遍歷,並且都用遞迴來寫。
回溯演算法是早期簡單的人工智慧,有些教程把回溯叫做暴力搜尋,但回溯沒有那麼暴力,回溯是有方向地搜尋。「力扣」上有一些簡單的遊戲類問題,解決它們有一定的難度,大家可以嘗試一下。
n 皇后(困難):其實就是全排列問題,注意設計清楚狀態變數,在遍歷的時候需要記住一些資訊,空間換時間;
解數獨(困難):思路同「n 皇后問題」;
祖瑪遊戲(困難)
掃雷遊戲(困難)
技巧:排列用used儲存重複或者不重複狀態;組合用begin來保證重新組合不會重複
鍊錶題型解題技巧
鍊錶解題模板 1.雙指標法 可以解決大約百分之60的題目 兩個關鍵點 由於鍊錶是同向的,因此雙指標法的不同主要在下面兩點 1 雙指標的起始距離 2 雙指標的移動速度 根據上述的乙個或兩個不同可以找到鍊錶的中位數 鍊錶的倒數第n個數等。2.遞迴法 recursion 遞迴法三個關鍵步驟 1 詢問子問題...
常用的解題技巧 尺取法
尺取法 顧名思義,像尺子一樣取一段,借用挑戰書上面的話說,尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的時候,所以尺取法是一種高效的列舉區間的方法,一般用於...
從快手筆試題x到y的次數看bfs解題技巧
給定兩個 100到100的整數x和y,對x只能進行加1,減1,乘2操作,問最少對x進行幾次操作能得到y?例如 a 3,b 11 可以通過322 1,3次操作得到11 a 5,b 8 可以通過 5 1 2,2次操作得到8 我們可以這樣來解這道題,計算出從a一步操作能夠得到幾,兩步操作能夠得到幾,三步操...