原创 leetcode—6/12

1. 填充每個節點的下一個右側節點指針II 給定一個二叉樹 struct Node { int val; Node* left; Node* right; Node* next; } 填充它的每個next指針,讓這個指針

原创 leetcode—5/3

1.下一個排列 實現獲取下一個排列的函數,算法需要將給定數字序列重新排列成字典序中下一個更大的排列。 如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列)。 必須原地修改,只允許使用額外常數空間。 思路:從右向左

原创 leetcode—5/6

1.組合總和 給定一個無重複元素的數組candidates和一個目標數target,找出candidates中所有可以使數字和爲target的組合。 candidates中的數字可以無限制重複被選取。 所有數字(包括target)

原创 leetcode—5/27

1.分隔鏈表 給定一個鏈表和一個特定值x,對鏈表進行分隔,使得所有小於x的節點都在大於或等於x的節點之前。 你應當保留兩個分區中每個節點的初始相對位置。 思路:遍歷鏈表,碰到大於或等於目標值的,則將節點接在鏈表尾部 ListNod

原创 leetcode—5/9

1.字母異位詞分組 給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。 思路:將字符串和異位詞列表形成映射 將字母轉化爲26位0-1串 vector<vector<string>> grou

原创 leetcode—6/10

1. 有序鏈表轉換二叉搜索樹 給定一個單鏈表,其中的元素按升序排序,將其轉換爲高度平衡的二叉搜索樹。 本題中,一個高度平衡的二叉樹是指一個二叉樹每個節點的左右兩個子樹的高度差的絕對值不超過1。 思路:本題主要在於尋找鏈表的中間節點

原创 leetcode—5/28

1.格雷編碼 格雷編碼是一個二進制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。 給定一個代表編碼總位數的非負整數n,打印其格雷編碼序列。格雷編碼序列必須以0開頭。 思路:格雷編碼的生成過程,G(i) = i ^ (i/

原创 leetcode—5/16

1.矩陣置零 給定一個m×n的矩陣,如果一個元素爲0,則將其所在行和列的所有元素都設置爲0。請使用原地算法。 思路:利用第一行和第一列來存儲矩陣中0所在的行和列。 void setZeroes(vector<vector<int>

原创 leetcode—5/31

1.二叉樹的中序遍歷 給定一個二叉樹,返回它的中序遍歷 思路:遞歸 vector<int> inorderTraversal(TreeNode* root) { vector<int> res; i

原创 leetcode—6/20

1. 對鏈表進行插入排序 對鏈表進行插入排序 算法: 插入排序是迭代的,每次只移動一個元素,直到所有元素可以形成一個有序的輸出列表 每次迭代中,插入排序只從一個輸入數據移除一個待排序的元素,找到它在序列中適當的位置,並將其插入

原创 leetcode—6/19

1. 重排鏈表 給定一個單鏈表L: L0 -> L1 ->…-> Ln-1 -> Ln 將其重新排列後變爲:L0 -> Ln-> L1 -> Ln-1-> L2 -> Ln-2->… 你不能只是單純的改變節點內部的值,而是需要實際

原创 leetcode—6/18

1. 複製帶隨機指針的鏈表 給定一個鏈表,每個節點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節點或空節點。 要求返回這個鏈表的深拷貝。 必須返回給定的拷貝作爲對克隆列表的引用。 思路:對於一個節點,它的next指針指向

原创 leetcode—6/17

1.加油站 在一條環路上有N個加油站,其中第i個加油站有汽油gas[i]升 你有一輛油箱容量無限的汽車,從第i個加油站開往第i+1個加油站需要消耗汽油cost[i]升。你從其中的一個加油站出發,開始時油箱爲空。 如果你可以繞環路行

原创 leetcode—6/13

1. 求根到葉子節點數字之和 給定一個二叉樹,它的每個節點都存放一個0—9的數字,每條從根到葉子節點的路徑都代表一個數字。 計算從根到葉子節點生成的所有數字之和 思路:有幾個葉子節點就有幾個數字,利用棧實現 利用棧實現,非遞歸

原创 leetcode—6/14

1. 分割回文串 給定一個字符串s,將s分割成一些子串,使每個子串都是迴文串 返回s所有可能的分割方案 vector<vector<string>> partition(string s) { vector<vec