原创 LeetCode-3Sum Smaller

每次外層循環固定住一個數字, 然後剩下兩個使用two pointer方法 每次初始化成頭和尾 然後根據大小挪動一次 public class Solution { public int threeSumSmaller(int[]

原创 *LeetCode-Unique Word Abbreviation

這個題也很簡單 但是要想全可能存在的情況 所以假如只有hello 那hello是可以的 或者根本dict裏面沒有這個詞 也沒有這個詞的abb也是可以的 我用了map of string and int 來count有幾個這樣的abb 還用

原创 LeetCode-Group Shifted Strings

不難 只是細節很多 map list等的細節還是需要背啊 public class Solution { public List<List<String>> groupStrings(String[] strings) {

原创 LeetCode-Shortest Word Distance II

因爲需要多次call 所以就存成hashmap 存position list 關鍵是找min的時候 實際上就是給兩個list 找其中數字最小difference  方法就是每次更新那個小的 讓他變大 去靠近大的 ( 因爲list是sort

原创 *LeetCode-Verify Preorder Sequence in Binary Search Tree

build bst using traversal那些題還要再看一遍 用一個stack 每次假如還在left subtree 即num 《 stack top 就push 假如大了 就一直pop知道不再大於 然後push進去  但是要記錄

原创 *LeetCode-Wiggle Sort

又是不知道怎麼想 規律是 每兩個兩個之間是小於 每對之間是大於  所以就根據 i 的奇偶性來判斷兩個連續數字見的關係 並且可以發現swap不會影響前面的正確 因爲一對之間的關係應該是大於 假如是小於 需要swap 那麼只會給前面換過去一個

原创 *LeetCode-Flip Game II

backtracking 每次翻兩個 然後向下遞歸 但是注意要取下次遞歸的返回值 因爲假如對手一定輸了 那麼自己才一定贏了 public class Solution { public boolean canWin(String

原创 *LeetCode-Count Univalue Subtrees

想到了用遞歸判斷子樹中的count 並且記錄目前位置所有數字是否unify 但是沒有想好怎麼存這些信息 怎麼返回,count 可以作爲static var 然後helper就返回boolean 注意count更新的條件 返回true fa

原创 **LeetCode-Paint Fence

不知道怎麼做  思路是 每次考慮當前這個和前一根是否相同 假如想要相同 那就不可以用上一次是不同的那個次數  假如不同 就和上上根沒有關係 只要跟上一根不同就行 就有k-1種 並且要乘以上一次(dif + same) 最後return 也

原创 *LeetCode-Reverse Words in a String II

首先把整個string reverse 然後每個詞再reverse 或者先每個詞reverse 再整個reverse 注意最後一個詞要記得reverse 這也是隻有一個詞的coner case的情況 public class Soluti

原创 **LeetCode-Inorder Successor in BST

簡直想不清楚!!! iterative:  TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { TreeNode* candidate = NULL; whi

原创 *LeetCode-Maximal Rectangle

DP!!!!!! 分別用和寬度相等的三個數組 記錄每一行這個位置所處的字符所在的rect的左右邊界和高度 left(i,j) = max(left(i-1,j), curleft), curleft can be determined

原创 *LeetCode-Zigzag Iterator

很笨的把兩個list當數組用了 還把list複製了一遍 list自己的iterator就可以了 而且有個很好的方法就是兩個iterator每次swap就可以了 不用判斷上個是輸出的誰  public class ZigzagIterato

原创 *LeetCode-Paint House

backstracking和dp的時間複雜度!  這個題backstracking超時了 dp就省時間一些 每個格子是這個房子某種顏色 + min(截至上個房子另一種顏色,上一個房子第三種顏色) public class Solution

原创 *LeetCode-Closest Binary Search Tree Value

啊 最直觀的應該是iterative的 每次向下一層 都嘗試更新min dist就好 不會因爲選擇了某一邊而錯過min dist的!因爲假如root 比target大 那root右邊那些更大的不可能比root更近! public clas