歡迎閱讀kyo醬的部落格!
歡迎閱讀kyo醬的部落格!
emmm歡迎所有的認識的,不認識的大家來閱讀我的部落格!其實在這篇部落格之前寫過好幾篇解leetcode的部落格,無奈功力不夠深厚,程式碼寫得不好都沒有什麼人看。。。
於是不知是從什麼時候開始,我就在想,怎麼才能寫一些有內容,有參考價值的部落格呢,至少發給男盆友他也不至於一眼不看,能好好讀一讀,當然要是能把某一頁加入收藏那我就再感激不過!想了很久,我決定在成為網紅之前,先不斷積累自己,多讀一讀別人家的部落格,多做一些題,所以決定做一個為大家推送好的博文的一個部落格吧!沒人看至少我自己需要的時候還能翻一翻[捂臉]之前寫的那些程式碼,過一陣子自己都不想再開啟看...對了,萬一我要是紅了很多人看我的部落格呢是吧,所以我先把名字改的網紅一點[黑臉]!
一下根據Leet的題進行分類介紹一些比較經典的題與演算法:
這一篇先介紹回溯法!!!
回溯法
1.回溯的概念
回溯法,說起來很簡單就像這個名字一樣,當路走不下去了,遇到牆了就回頭。。但是用程式碼實現起來就真的是十分艱難呀!!!回頭要怎麼辦??要遞迴!!反正聽到遞迴我是很絕望。。
先找了一篇簡單說一下回溯是什麼意思的部落格看了一下:ofollow,noindex"> https://www.jianshu.com/p/acb3d9126a9d
裡面說的剪枝呀這些看不懂暫時都沒什麼,就看明白回溯是要幹嘛的就可以了
2.回溯的正規化(模板)
模板嘛。。為了凸顯學術性就叫正規化,其實大學階段學到的,以及面試要用到的很多演算法都是有通用模板的,你自己也可以回去翻一翻自己從前做過的演算法題,寫過的程式碼,就會驚奇的發現好多題之間是沒有什麼關係的但是寫出來的程式碼的基本格式都是一樣的,在同樣的地方有著類似的迴圈與判斷語句,就比如BST中查詢節點與二分查詢的程式碼就十分相似,其實原理上也是有關聯的。
有關回溯模板的具體實現見 https://blog.csdn.net/jarvischu/article/details/16067319
這篇部落格我覺得是寫的很好呀,反正我是看了有了巨大昇華,於是後來找了個小本本把裡面的東西都抄了一遍。
這篇部落格將回溯分為遞推和遞迴兩類。其中遞推通常是指可以根據數學公式進行推導,由前一個函式值推導下一個函式值的型別,這篇文章裡面沒有過多敘說,多的說的是遞迴形式的回溯並且給出了經典演算法的例子如N皇后,揹包問題一一可以與上面的模板進行比較,都看完一定會有很大收穫!
3.回溯的練習題
關於回溯的習題,本篇部落格裡主要介紹的是Leetcode上點贊量很高,也很經典的習題。當然也可以搜尋backtracking的標籤,將看到所有關於回溯的練習題
https://juejin.im/post/5b3b56045188251abe49f738
這篇部落格裡面有六道我個人認為非常經典的習題和詳細的解析,每一道後面都還有和例題差不多的,讓各位讀者自己去實現的幾道習題。
我也是從一道題沒有做過開始慢慢把裡面的幾道題都做了出來!!!所以呀,慢慢來,不要傷心,不要迷茫。不一定要每天都做題,但是盡求每天都能有學到的一點東西吧,總會有一天自己回顧自己之前寫的程式碼,你會發現自己原來可以這麼強
首先這篇部落格裡提及的幾道題,個人覺得最簡單,Acceptance最高的是
leetcode 17. 電話號碼的字母組合
所以建議最開始做回溯的題先從這一道開始
leetcode 46:組合問題(Permutations)
這道題和17的難度基本相同,唯一不太一樣的就是每次都要迴圈但是已經包含的元素不可以再次包含,Permutations是一個系列的題,還有Permutations I,PermutationsII都是回溯系列的,難度逐漸遞增
leetcode 77. 組合
個人認為,和46難度一樣兩個裡面做出一個另一個同理也能做出來,將46與77結合起來就是 78題,Subsets 要是鞏固回溯基礎的話這幾道題可以都做一下
leetcode 200. 島嶼的個數
這個題真的是太經典了!!!十分經典!!只要是學圖的DFS之後基本都會涉及到的一道題,強烈建議做一下,這個題不止在leetcode上面有,poj上UVA上面都有!DFS入門必做
leetcode 51. N皇后
這個問題自從上了大學,學了程式設計語言就會一直講的題!就是回溯的判斷條件寫起來比較費事,照著模板寫就能寫出來~而且最近上人工智慧課上又探討了這個問題。。。這麼經典的題,可能寫一遍都不夠了,需要背下來或者深深刻在腦子裡吧
以上就是有關回溯的本期內容~由於學業繁忙,新內容將不定期更新~祝大家國慶假期愉快!
---恢復內容結束---