目錄
129、求根到葉子節點數字之和 題目
題解 **
130、被圍繞的區域 題目
題解 **
131、分割回文串 題目
題解 **
132、分割回文串ii 題目
題解 **
給定乙個二叉樹,它的每個結點都存放乙個 0-9 的數字,每條從根到葉子節點的路徑都代表乙個數字。遞迴例如,從根到葉子節點路徑 1->2->3 代表數字 123。
計算從根到葉子節點生成的所有數字之和。
說明: 葉子節點是指沒有子節點的節點。
示例 1:
輸入: [1,2,3]
1/ \
2 3
輸出: 25
解釋:從根到葉子節點路徑 1->2 代表數字 12.
從根到葉子節點路徑 1->3 代表數字 13.
因此,數字總和 = 12 + 13 = 25.
示例 2:
輸入: [4,9,0,5,1]
4/ \
9 0
/ \5 1
輸出: 1026
解釋:從根到葉子節點路徑 4->9->5 代表數字 495.
從根到葉子節點路徑 4->9->1 代表數字 491.
從根到葉子節點路徑 4->0 代表數字 40.
因此,數字總和 = 495 + 491 + 40 = 1026.
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
value = value * 10 + root->val;
if(root->left == nullptr && root->right == nullptr)
if(root->left)
if(root->right)
}int sumnumbers(treenode* root)
private:
int result;
};
給定乙個二維的矩陣,包含 'x' 和 'o'(字母 o)。方法一:深度優先搜尋找到所有被 'x' 圍繞的區域,並將這些區域裡所有的 'o' 用 'x' 填充。
示例:x x x x
x o o x
x x o x
x o x x
執行你的函式後,矩陣變為:
x x x x
x x x x
x x x x
x o x x
解釋:被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的 'o' 都不會被填充為 'x'。 任何不在邊界上,或不與邊界上的 'o' 相連的 'o' 最終都會被填充為 'x'。如果兩個元素在水平或垂直方向相鄰,則稱它們是「相連」的。
方法二:廣度優先搜尋
class solution
m = board[0].size();
for(int i = 0; i < n; i++)
for(int i = 0; i < m - 1; i++)
for(int i = 0; i < n; i++) else if(board[i][j] == 'o') }}
}void dfs(vector>& board, int i, int j)
board[i][j] = 'a';
dfs(board, i - 1, j);
dfs(board, i, j - 1);
dfs(board, i + 1, j);
dfs(board, i, j + 1);
}*///廣度優先搜尋演算法
public:
/* void solve(vector>& board)
int m = board[0].size();
queue> q;
for(int i = 0; i < n; i++)
if(board[i][m - 1] == 'o')
}for(int i = 1; i < m - 1; i++)
if(board[n - 1][i] == 'o')
}int row[4] = ;
int col[4] = ;
while(!q.empty()) }}
for(int i = 0; i < n; i++) else if(board[i][j] == 'o') }}
}*/};
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。回溯返回 s 所有可能的分割方案。
示例:輸入: "aab"
輸出:[
["aa","b"],
["a","a","b"]
]
class solution ;
}backtracking(s, 0, {});
return result;
}private:
vector> result;
// 回溯
void backtracking(string s, int start, vectorarr)
for(int i = start; i < s.size(); ++i) }}
// 判斷當前字串是否是回文串
bool ispartition(string s)
l++;
r--;
}return true;
}};
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。動態規劃返回符合要求的最少分割次數。
示例:輸入: "aab"
輸出: 1
解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個回文子串。
class solution
int strsize = s.size();
vector> judge(strsize, vector(strsize, false));//judge[j][i]用於記錄s串[i,j]是否是回文
vectordp(strsize, int_max);//dp[i]用於記錄s串中[0, i]需要分割的次數
for (int i = 0; i < strsize; ++i)
else }}
} return dp[strsize - 1];
}};
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...