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
103. Binary Tree Zigzag Level Order Traversal - Medium 前往題目 想法 BFS,但不小心寫錯了🤣導致有奇怪的bug 思路 BFS 判斷奇數行還是偶數行決定是否反轉(不能直接判斷然後加入,這樣會造成queue裡的順序也不一樣,就沒辦法在下一個level把順序倒轉回來) Code class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode 2024-01-11 Leetcode > Medium #Leetcode #心得 #Binary Tree #Breadth-First Search #Tree
48. Rotate Image - Medium 前往題目 想法 快速找了一下規律,沒有找到 思路 每個cell都反轉其row和column,也就是(1, 0)變為(0, 1),兩個cell互換 然後每行前後對調 Time: $O(N^2)$Space: O(1) Code討論區解答 class Solution { public void rotate(int[][] matrix) { // 2024-01-10 Leetcode > Medium #Leetcode #心得 #Array #Math #Matrix
221. Maximal Square - Medium 前往題目 想法 只想得到暴力解 覺得優化應該是從側邊開始,根據以往經驗,因為這樣才能memorize同時確保每次只有一種狀況,往內推進的時候也都能用到cache 思路Top down 從左上開始 每個cell都檢查其右、下,斜右下,藉以更新當前cell 直到最後就會得到一個紀錄每個格子最大square的表格 Time: O(M * N)Space: O(M * N) Bottom up(D 2024-01-10 Leetcode > Medium #Leetcode #心得 #Array #Matrix #Dynamic Programming
Flask重構-使用工廠方法和藍圖 雖然初步開發的時候可以不用管結構,全部程式碼都塞在一起就好,但是遇到要擴展或是測試的時候問題就出現了,很多潛在的問題在程式擴展的路上會出現,增加很多時間成本。而我自己也想練習一下寫測試,有好的結構才能快速切換測試和開發的環境,剛好藉由自己的這個小project來玩玩看 結構參考《Flask Web開發》 以下是重構後的資料結構 code都拆開放在專屬的py檔案裡了 app資料夾是放Fla 2024-01-09 Project #Flask #Factory Pattern #Blueprint #Configuration
283. Move Zeroes - Easy 前往題目 想法 只想得到用一個額外的陣列儲存非零項,這樣空間和時間都是O(N) 思路題目很詐,說move all 0's to the end of it,這樣第一眼就在想要怎麼把0移到後面,但其實只要反過來想,把非零項移到前面就好了,最後再補上零即可… 把非零項移到前面 補上所需的零 Codeclass Solution { public void moveZe 2024-01-09 Leetcode > Easy #Leetcode #心得 #Array #Two Pointers
234. Palindrome Linked List - Easy 前往題目 想法 因為是單鏈,所以只能先找中間點,不然沒有基準 找到中間點後就可以知道左半部和右半部的分水嶺 沒想到可以Reverse 思路 找到中間點 反轉右半邊 檢查palindrome 反轉那邊有點繞,但基本上就是 定義一個previous指針,然後會從slow指針開始反轉(因為他一定在mid+1) 存slow.next,也就是原來的下一個 slow.next換成previous,這裡 2024-01-09 Leetcode > Easy #Leetcode #心得 #Stack #Recursion #Two Pointers #Linked List