原创 [LeetCode]problem 151. Reverse Words in a String

TAG 字符串反轉 塊反轉 題目鏈接 方法 題目要求O(1)空間,不知怎麼,立即想到了《編程之美》上“將一個數循環移位k位”的題目。如此可以滿足時間爲O(n),且空間複雜度爲O(1). 具體步驟 將字符串中每個單詞單獨反轉 整個

原创 [LeetCode]problem 40. Combination Sum II

TAG 遞歸 回溯 組合數和 link 方法 與Combination Sum 相比, 每個數僅能被使用一次 候選集不再是set,而是collections,就是可以包含重複數字了 怎麼辦呢?針對第一個,非常簡單,只需要把開始

原创 [LeetCode]problem 164. Maximum Gap

TAG 桶排序 浮點數不精確 link 方法 一眼看過去完全不知道該怎麼做。 看了題解覺得很高端的樣子,再後來多看了下,發現本質其實就是一個線性時間排序的問題! 線性時間排序,有計數排序、桶排序、基數排序。 計數排序時間複雜度與最

原创 [LeetCode]problem 80. Remove Duplicates from Sorted Array II

link TAG 雙指針 思維方式 容器的end()調用耗時顯著性 方法 算是很容易想到的題,然而寫起來卻很糾結…還得多練啊.. 我的思路是,記錄重複的次數,初始爲0,如果相等一次,則首先+1,然後判斷是否小於2,如果是,則繼續

原创 編譯原理—語法分析

PS 多年前寫的了,放在草稿箱裏… 現在發出來了 上週完成了編譯實驗課程的語法分析部分,週末玩去了,今天稍稍整理一下。 首先我們是採用語法制導翻譯來做的編譯,書上對於語法制導翻譯的解釋是,將靜態檢查和中間代碼生成結合到語法

原创 [LeetCode]problem 62. Unique Paths

TAG 動態規劃 組合 link 方法 就使用動態規劃而言,這道題與爬梯子很像,就是到達當前位置的不同路徑數等於到達上邊、左邊位置的路徑和。 這道題可以直接從數學角度求解——mxn的格子,從左上到右下,只能向右或下,那麼其路徑必然

原创 [LeetCode]problem 94. Binary Tree Inorder Traversal

TAG 二叉樹中序非遞歸遍歷 基礎;重要 link 方法 非常基本的、非常重要的、必須熟練掌握的技能! 非遞歸中序遍歷二叉樹,需要結合棧作爲回溯,同時記住讀取的時機。 中序遍歷要求: 先左、再當前、再右邊。 所以讀取一個節點的時機

原创 [LeetCode]problem 216. Combination Sum III

TAG 遞歸 回溯 組合數和 link 方法 與Combination Sum1和Combination Sum2相比,就是上述兩個問題的綜合,再稍有限制: 候選集是set (1-9) 每個數字只能用一次(組合中各數字是uniq

原创 同一作用域下函數名(變量名)可以覆蓋類、結構體名

我們要定義一個使用默認構造函數構造的對象,有時可能出現下面的錯誤: className co() ; 上面其實並沒有定義對象co , 而是定義了一個名爲co,類型爲className ()的函數。 之前也僅僅到此了,今天要用<sy

原创 [LeetCode]problem 174. Dungeon Game

TAG 動態規劃 link 方法 標準DP問題,沒有太大思考難度。不過還是在紙上畫了一會了,寫出了需要滿足的條件,結果覺得還是直接直觀理解更加簡單。 明顯需要倒推。 首先是最後一個格子。到達這個格子之前,K至少有1點HP,設當前地

原创 [LeetCode]problem 117. Populating Next Right Pointers in Each Node II

TAG 層序遍歷 - 常量空間,通過next指針 二叉樹 link 方法 有了Populating next right pointers in each node I的鋪墊,這道題就顯得沒有任何思維上的限制了。 在上道題(完全二

原创 [LeetCode]problem 63. Unique Paths II

TAG 動態規劃 link 方法 如果說Unique Path I還會考慮直接用組合數的方法去做的話(雖然並不會很簡單),加入了障礙後,這道題才真正有了動態規劃的優勢。 相比之下,有以下兩點: 邊界上,從原點分別向右和向下初始化

原创 [LeetCode]problem 70. Climbing Stairs

link TAG 動態規劃 類-斐波拉切 方法 之前寫算法作業時做過,所以現在看起來就很簡單了… 滿足以下遞推式: A(1) = 1 A(2) = 2 A(n) = A(n-1) + A(n-2) 其中A(n)表示到第n步梯子時

原创 [LeetCode]problem 116. Populating Next Right Pointers in Each Node

TAG 層序遍歷 - 常量空間,通過next指針 二叉樹 link 方法 看到題,想了一下,得用層序遍歷! 做法是: 用兩個vector,第一個vector用來依次存當前層的父節點,另一個vector用來依次存下一層的孩子節點。

原创 [LeetCode]problem 191. Number of 1 Bits

TAG 位操作 漢明重量 HammingWeight link 方法 非常有背景的一道題。 討論見stack-overflow 詳細見維基百科-漢明重量 or Wikipedia-Hamming Weight 總的來說,這是經典的