LeetCode C 刷題97 100題題解

2021-10-23 16:53:02 字數 3808 閱讀 6947

給定三個字串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。

示例 1:

輸入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"

輸出:true

示例 2:

輸入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"

輸出:false

動態規劃

class solution 

auto f = vector>(m + 1, vector(n + 1, false));

f[0][0] = 1;

for(int i = 0; i <= m; i++)

if(j > 0) }}

return f[m][n];

}};

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

假設乙個二叉搜尋樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:

輸入:2

/ \1   3

輸出: true

示例 2:

輸入:5

/ \1   4

/ \3   6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

方法一:迭代

方法二:遞迴

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

// stackarr;

// arr.push(root);

// while(!arr.empty())

// arr.push(node->left);

// }

// // 判斷右節點

// if(node->right != nullptr)

// arr.push(node->right);

// }

// }

// return true;

// }

// 方法二:遞迴

bool result;

int step = 0;

int min_val = 0;

void isvalid(treenode* root)

if(root) else

min_val = root->val;

}min_val = root->val;

}if(root -> right)

}bool isvalidbst(treenode* root)

result = true;

isvalid(root);

return result;

}};

二叉搜尋樹中的兩個節點被錯誤地交換。

請在不改變其結構的情況下,恢復這棵樹。

示例 1:

輸入: [1,3,null,null,2]1/

3\2輸出: [3,1,null,null,2]3/

1\2示例 2:

輸入: [3,1,4,null,null,2]

3/ \

1   4/2

輸出: [2,1,4,null,null,3]

2/ \

1   4/3

高階:使用 o(n) 空間複雜度的解法很容易實現。

你能想出乙個只使用常數空間的解決方案嗎?

遞迴

/**

* 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

recover(root->left);

if(last != nullptr && root->val < last->val)

t2 = root;

}last = root;

recover(root->right);

}public:

void recovertree(treenode* root)

recover(root);

int tmp = t1->val;

t1->val = t2->val;

t2->val = tmp;

}};

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例 1:

輸入:       1         1

/ \       / \

2   3     2   3

[1,2,3],   [1,2,3]

輸出: true

示例 2:

輸入:      1          1

/           \

2             2

[1,2],     [1,null,2]

輸出: false

示例 3:

輸入:       1         1

/ \       / \

2   1     1   2

[1,2,1],   [1,1,2]

輸出: false

遞迴

/**

* 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

if((!p && q) || (!q && p))

if(p->val != q->val)

if(issame(p->left, q->left) && issame(p->right, q->right))

return false;

}public:

bool issametree(treenode* p, treenode* q)

if(!p && q)

if(!q && p)

return issame(p, q);

}};

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