原创 38.通配符匹配

題目描述: 代碼實現: 回溯法,本題主要的難點在於如何解決’‘的問題,由於’‘可以匹配任意長度的字符串,那麼我們就可以通過記錄‘’的位置通過回溯的方法來解決這個問題,先讓 ‘’匹配 0 個字符,如果匹配 0 個字符不成功,則根

原创 29.不同的二叉搜索樹 II

題目描述: 給定一個整數 n,生成所有由 1 … n 爲節點所組成的二叉搜索樹。 示例: 輸入: 3 輸出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,

原创 28.二叉樹的中序遍歷

題目描述: 給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 代碼實現: 遞歸法,中序遍歷是左節點,根節點,右節

原创 40.只出現一次的數字

題目描述: 代碼實現: 位運算,一個數和 0 做 XOR 運算等於本身:a⊕0 = a,一個數和其本身做 XOR 運算等於 0:a⊕a = 0 ,XOR 運算滿足交換律和結合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b =

原创 35.分發餅乾

題目描述: 代碼實現: 貪心算法,先排序,之後刪掉s的第一個元素,並比較它和g的第一個元素的大小,如果比它大於等於,則刪除掉g的第一個元素。 時間複雜度:O(nlogn) /** * @param {number[]} g

原创 39.反轉字符串

題目描述: 代碼實現: 方法一: 函數法 /** * @param {character[]} s * @return {void} Do not return anything, modify s in-place i

原创 36.跳躍遊戲

題目描述: 代碼實現: 貪心算法,我的思路好像跟那些題解的思路不太一樣。首先做這道題,我先考慮的是什麼情況可以出現false,就是除了數組的最後一位,有一位出現0且這個時候的max=i(因爲max不可能小於i),除了這種情況,

原创 43.二叉樹的最近公共祖先

題目描述: 代碼實現: 遞歸法,對左右子樹分別遞歸,找到p,q後返回,若left,right同時找到pq,就返回根節點,如果只有left和right其中一個找到,就返回他們本身。 /** * Definition for

原创 42.格林編碼

題目描述: 代碼實現: 應用格林編碼的公式,使用位運算的方式,將i右移一位並與原來的i做異或運算即得到結果。 時間複雜度:O(2^n) /** * @param {number} n * @return {number[

原创 41.子集

題目描述: 代碼實現: 迭代法,首先初始化res爲一個二維數組,包括一個[],在迭代的過程中,依次找含有nums[0],nums[1]…的子集,與前面的子集拼接,得到新的子集。 時間複雜度:O(N×2^N) 值得注意的是,這裏

原创 31.恢復二叉搜索樹

題目描述: 代碼實現: 還不是很懂 時間複雜度:O(n) /** * Definition for a binary tree node. * function TreeNode(val) { * this.v

原创 30.整數反轉

題目描述: 代碼實現: 思路很簡單,關鍵在於對於邊界值的處理 時間複雜度:O(log(x)) /** * @param {number} x * @return {number} */ var reverse = fu

原创 33.判斷子序列

題目描述: 代碼實現: 雙指針法,快指針在t中遍歷,給s一個慢指針flag,如果s[flag] === t[i],慢指針就向後移,並判斷flag是否等於s的長度,如果最後等於長度,則爲true,否則,爲false。 時間複雜度

原创 32.設計循環雙端隊列

題目描述: 代碼實現: 利用數組實現 /** * Initialize your data structure here. Set the size of the deque to be k. * @param {num

原创 25.對稱二叉樹

題目描述: 代碼實現: 遞歸法,遍歷樹,判斷左右節點是否相等即可。 時間複雜度:O(n) /** * Definition for a binary tree node. * function TreeNode(val)