LeetCode C 刷題129 132題題解

2021-10-09 15:12:57 字數 3484 閱讀 6422

目錄

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...