143. Reorder List - Medium 前往題目 想法 用hashmap存,每一個對應的數字,然後再一次循環把全部拼起來 思路意外的好理解,因為都是用到之前寫過的演算法 找到middle node(快慢指針) 把middle之後的,也就是second half反轉 再和first half合併(因為此時second half已經反轉,可以直接接上) Code class Solution { public v 2024-01-16 Leetcode > Medium #Leetcode #心得 #Stack #Recursion #Two Pointers #Linked List
73. Set Matrix Zeroes - Medium 前往題目 想法 遇到0就直接整行和整列換成0,這樣時間是O(m * n (m + n)) 感覺比較適合用DFS 思路結果不是BFS也不是DFS,因為不是感染的方式,而是只看初始狀態 第一行和第一列拿來當作儲存空間,遇到cell為0的就直接把最上面和最左邊的cell賦值為0,這還算是紀錄而已(因為只紀錄在第一行和第一列) 實際把該為0的cell替換為0(但是不替換第一行和第一列,要保持原始狀態 2024-01-16 Leetcode > Medium #Leetcode #心得 #Array #Hash Table #Matrix
7. Reverse Integer - Medium 前往題目 想法 以為可以用bit manipulation 思路 每次取一位,並去除x一位 檢查溢出 沒問題就加入result 這題的關鍵是怎麼判斷溢出,沒有overflow的話就是easy到不行的題目 如何判斷overflow: 判斷result是否大於Integer.MAX_VALUE / 10,先不看最後一位,如果大於就不用看最後一位,因為確定他們位數相同;負數則判斷是否小於Inte 2024-01-15 Leetcode > Medium #Leetcode #心得 #Math
91. Decode Ways - Medium 前往題目 想法 無,想說是不是可以用greedy 思路DFS 利用momization紀錄每個位置有幾種可能 檢查一位數與二位數,並將結果加入cache Time: O(n)Space: O(n) code實際執行會一直呼叫DFS方法直到最後一位,會return 1,這時才會開始return然後答案會慢慢建立起來,有一種從根源開始蔓延到最遠處,到底之後再帶著結果回來,還是一樣的繞…光是理解 2024-01-15 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming
179. Largest Number - Medium 前往題目 思路 利用string比較時會照數字先後排序(0, 1, 2, 3, ...) 排序完之後第一位是最小的(以第一個數字來看),然後越來越大 檢查最後一個數字的第一位是不是0,如果是就直接回傳0,因為沒有其他可能了 最後把string array由後往前拼起來就是答案了 Code討論區解答 class Solution { public String largestN 2024-01-14 Leetcode > Medium #Leetcode #心得 #String #Array #Greedy #Sorting
268. Missing Number - Easy 前往題目 想法 只想到了用HashSet存,然後比較,雖然是時間是O(N)但空間也是,不符合題目要求 思路這題大致有兩種做法,Bit manipulation和Sum Bit manipulation 算0~n的XOR應該是多少 再用上面的結果去XOR實際的nums陣列 因為XOR的特性是與自己相同的XOR完會是0,所以全部XOR一遍的結果就是答案,也就是缺失的那個 Sum 可以用公式直 2024-01-14 Leetcode > Easy #Leetcode #心得 #Array #Math #Hash Table #Sorting #Bit Manipulation #Binary Search
101. Symmetric Tree - Easy 前往題目 想法 嘗試用了BFS但沒有成功,本來想說要用size來判斷然後分左右邊 看了discussion才知道直接用left和right就好,跟DFS一樣 思路DFS 每輪都比較left和right node的值 繼續用left的子樹還有right的子樹呼叫DFS BFS解法 Code class Solution { public boolean isSymmetr 2024-01-14 Leetcode > Easy #Leetcode #心得 #Binary Tree #Depth-First Search #Breadth-First Search #Tree
74. Search a 2D Matrix - Medium 前往題目 想法 之前做過,題目要求O(log(m * n))以為不能疊代整個矩陣,於是先用binary search尋找target可能在哪一行,然後再搜尋特定那一行 看了之前我的submission才發現其實可以,因為都用binary search所以每行都檢查的話就符合題目要求的time complexity 思路 疊代每行 在每行binary search target Codecla 2024-01-12 Leetcode > Medium #Leetcode #心得 #Array #Matrix #Binary Search
50. Pow(x, n) - Medium 前往題目 想法 嘗試寫了recursion但失敗了,沒有考慮到第二種base case x == 0 思路 遞迴的方式,採用divide的方法,每次都把n/2,這樣直接把當前答案乘以自己就可以了,例如$2^{10}$就會被拆成$2^5和2^5$ 遇到奇數n要再多乘一次 遇到負數直接1/結果就可以,無需另外考慮 Code class Solution { public do 2024-01-12 Leetcode > Medium #Leetcode #心得 #Recursion #Math
437. Path Sum III - Medium 前往題目 想法 毫無想法,說不定是要用什麼bottom-up之類的 思路暴力解 DFS 每個node都向下遞迴找尋符合sum的 每次發現都紀錄,最後直接回傳counter就好 優化解 突然有個小小的領悟,DFS方法第一次被呼叫的時候最後一行return的就是最終的結果,可以想像成一開始只有一個點,然後這個點還會再呼叫dfs,每次呼叫dfs方法就會拓展一個子節點,最後遇到base case例 2024-01-11 Leetcode > Medium #Leetcode #心得 #Binary Tree #Depth-First Search #Tree