目錄
111 二叉樹的最小深度 題目
題解完整**
112 路徑總和 題目
題解完整**
113 路徑總和ii 題目
題解完整**
114 二叉樹展開為鍊錶 題目
題解完整**
115 不同的子串行 題目
題解完整**
給定乙個二叉樹,找出其最小深度。遞迴最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明: 葉子節點是指沒有子節點的節點。
示例:給定二叉樹 [3,9,20,null,null,15,7],
3/ \
9 20
/ \
15 7
返回它的最小深度 2.
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
if(root->left == nullptr && root ->right == nullptr) else if(root->left != nullptr && root ->right == nullptr) else if(root->left == nullptr && root ->right != nullptr)
return min(mindepth(root->left) + 1, mindepth(root->right) + 1);
}};
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。遞迴說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
5/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
sum -= root->val;
if(root->left == nullptr && root->right == nullptr) else if(root->left != nullptr && root->right == nullptr) else if(root->left == nullptr && root->right != nullptr)
return haspathsum(root->left, sum) || haspathsum(root->right, sum);
}};
給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。遞迴說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
5/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:[
[5,4,11,2],
[5,8,4,5]
]
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
return;
}if(root->left != nullptr && root->right == nullptr)
if(root->left == nullptr && root->right != nullptr)
helper(root->left, tmp, sum);
helper(root->right, tmp, sum);
}vector> pathsum(treenode* root, int sum) ;
}helper(root, {}, sum);
return result;
}};
給定乙個二叉樹,原地將它展開為乙個單鏈表。遞迴+先序遍歷例如,給定二叉樹
1/ \
2 5
/ \ \
3 4 6
將其展開為:1\
2\3\
4\5\
6
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class solution
// 處理左子樹
flatten(root->left);
// 處理右子樹
treenode* r = root->right;
root->right = root->left;
root->left = nullptr;
while(root->right)
root->right = r;
flatten(root->right);
}};
給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。動態規劃(int溢位改long)乙個字串的乙個子串行是指,通過刪除一些(也可以不刪除)字元且不干擾剩餘字元相對位置所組成的新字串。(例如,"ace" 是 "abcde" 的乙個子串行,而 "aec" 不是)
題目資料保證答案符合 32 位帶符號整數範圍。
示例 1:
輸入:s = "rabbbit", t = "rabbit"
輸出:3
解釋:如下圖所示, 有 3 種可以從 s 中得到 "rabbit" 的方案。
(上箭頭符號 ^ 表示選取的字母)
rabbbit
^^^^ ^^
rabbbit
^^ ^^^^
rabbbit
^^^ ^^^
示例 2:
輸入:s = "babgbag", t = "bag"
輸出:5
解釋:如下圖所示, 有 5 種可以從 s 中得到 "bag" 的方案。
(上箭頭符號 ^ 表示選取的字母)
babgbag
^^ ^
babgbag
^^ ^
babgbag
^ ^^
babgbag
^ ^^
babgbag
^^^
class solution
for(int i = pos; i < s.size() - (t.size() - len) + 1; ++i) }}
int numdistinct(string s, string t)
*/// 動態規劃
// 如果int溢位,選擇long
public:
int numdistinct(string s, string t)
if(m == 0)
int result = 0;
vector> dp(n + 1, vector(m + 1, 0));
for(int i = 0; i <= n; ++i)
for(int i = 1; i <= n; ++i) else }}
return dp[n][m];
}};
LeetCode C 刷題 13 16題題解
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...
LeetCode C 刷題 53 56題題解
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。1 雙指標法 2...
LeetCode C 刷題 69 72題題解
實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。二分 clas...