202. Happy Number - Easy 前往題目 想法 一直算新的數字,然後每次都存到set裡面 檢查是否有一樣的,有的話就代表進入loop了,因為數字一樣,算出來的結果就一樣 思路 循環直到當前數字為1 每次循環都根據題目的公式算出新的值,然後檢查是否hashset裡面已經有了 有的話就代表無限迴圈 沒有的話就繼續 難得自己寫出來的題目:D Codeclass Solution { public boolean 2024-03-13 Leetcode > Easy #Leetcode #心得 #Math #Two Pointers #Hash Table
678. Valid Parenthesis String - Medium 前往題目 想法 想從單純合法括號衍生出加了*的解,但是不知道該怎麼處理 思路 遇到左與右括號正常增減計數 當遇到星號,紀錄其當成左括號與右括號的情況 如果星號都當成左括號還是無法匹配右括號直接回傳false,因為右括號無法靠左括號與空白補救 如果星號都當成右括號當無法匹配的時候,把右括號再變為左括號,因為左括號可以補救右括號 最後回傳右括號計數器,如果是0就代表成功匹配,因為右括號計數器會盡可 2024-03-12 Leetcode > Medium #Leetcode #心得 #Stack #String #Greedy #Dynamic Programming
763. Partition Labels - Medium 前往題目 想法 不知道如何判斷partition在何時結束 思路其實很簡單,疊代s的字符,每次都取最大的終點,這樣在一個partition結束時指針就會剛好等於end,因為此區間沒有更遠的字符了 紀錄每個字符(總共26個小寫字母)的終點 疊代s的所有字符,每次更新size和終點 指針等於終點的時候就是一個partition結束的時候 加入結果,並且歸零size Code class So 2024-03-11 Leetcode > Medium #Leetcode #心得 #String #Two Pointers #Greedy #Hash Table
1899. Merge Triplets to Form Target Triplet - Medium 前往題目 想法 題目根本沒看清楚😂以為只能選兩個,結果是可以每個都選,取max 思路 把不可能的去掉,也就是只要有比target大的那組就可以直接拋棄 剩下的全部取最大值看是否最終和target一樣,因為可以每個都取 Code主要參考了這個解答,因為比Neetcode大大的更直觀一點 class Solution { public boolean mergeTripl 2024-03-11 Leetcode > Medium #Leetcode #心得 #Array #Greedy
54. Spiral Matrix - Medium 前往題目 之前寫的文章 想法 初始的變數沒有想出來,有了left right top和bottom就簡單了 思路 定義上下左右邊界,以下的code要注意out of boundary 先取top elements 再取right elements 注意left要小於right,top要小於bottom以防special case 再取bottom elements 再取left element 2024-03-10 Leetcode > Medium #Leetcode #心得 #Array #Matrix #Simulation
8. String to Integer (atoi) - Medium 前往題目 之前的文章 想法 有寫出來但是一些test case沒過,找bug找到瘋掉 思路 忽略空白 決定正數還是負數 拼出數字,要防止溢出 回傳前確認要負數或正數 這題很容易條件沒考慮好… Codeclass Solution { public int myAtoi(String s) { final int len = s.length(); 2024-03-09 Leetcode > Medium #Leetcode #心得 #String
416. Partition Equal Subset Sum - Medium 前往題目 之前的文章 這次看到一樣想不出來,連code都花了一點時間才懂 思路 先知道總和,就可以知道有沒有辦法被分成兩個subset了(因為要能被2整除才能分配成兩個subsets) 目標target直接sum / 2,因為兩個subset總和相等 疊代nums所有的element 每個疊代中都使用新的一個hashset來儲存可能的數值(不然會導致還沒疊代完,dp就會被更新,這樣會更改到同一輪 2024-03-09 Leetcode > Medium #Leetcode #心得 #Array #Dynamic Programming
846. Hand of Straights - Medium 前往題目 想法 用dp? 思路 使用hashmap來儲存每個數字的個數,還有min heap來儲存最小值 循環直到minheap的數字都被取光 每次循環都先把最小的數字當基準點,然後再檢查這個數字的group能不能被建立 能不能被建立需要以下判斷 hashmap中有我們要的數字 取了之後,如果當前數字已經沒得取了,就看是否當前數字跟minheap的數字一樣,不一樣的話就代表沒辦法建立群組,因為 2024-03-08 Leetcode > Medium #Leetcode #心得 #Array #Greedy #Hash Table #Sorting
45. Jump Game II - Medium 前往題目 想法 從後往前,但不知道怎麼判斷最小跳幾次 思路這種題目無非就是窮舉,優化就是記憶法,但是這題只需要判斷哪個選擇最有潛力,也就是貪心思想 從前往後 每次紀錄最遠可以跳到哪 如果來到剛剛著陸的地方就再跳一次,跳到目前最遠的位置 Codeclass Solution { public int jump(int[] nums) { int f 2024-03-07 Leetcode > Medium #Leetcode #心得 #Array #Greedy #Dynamic Programming
72. Edit Distance - Medium 前往題目 思路 二維dp,分別是i和j,word1與word2的指針 i, j代表取word1和word2的前i和前j個 如此一來,base case就是word1取了前幾個,word2取0個,那每次都會等於i;相同的,word1取0個,word2取了前幾個,每次都等於j 從左到右一個一個看,當前的字母都一樣的話那代表什麼都不用做,所以就等於上次(i - 1, j - 1)的操作數 如果不一樣, 2024-03-07 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming