From 35bbec3e298c03cc69582f486baa961102e0f583 Mon Sep 17 00:00:00 2001
From: youngyangyang04 <826123027@qq.com>
Date: Mon, 17 Jan 2022 12:36:22 +0800
Subject: [PATCH 01/38] Update
---
problems/0063.不同路径II.md | 29 ++++----
problems/0096.不同的二叉搜索树.md | 10 +--
problems/0343.整数拆分.md | 26 +++----
problems/背包理论基础01背包-1.md | 88 +++++++++++------------
4 files changed, 75 insertions(+), 78 deletions(-)
diff --git a/problems/0063.不同路径II.md b/problems/0063.不同路径II.md
index 490b6b5c..1bcc11cd 100644
--- a/problems/0063.不同路径II.md
+++ b/problems/0063.不同路径II.md
@@ -4,7 +4,7 @@
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
-## 63. 不同路径 II
+# 63. 不同路径 II
[力扣题目链接](https://leetcode-cn.com/problems/unique-paths-ii/)
@@ -22,23 +22,22 @@

-输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
-输出:2
+* 输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
+* 输出:2
解释:
-3x3 网格的正中间有一个障碍物。
-从左上角到右下角一共有 2 条不同的路径:
-1. 向右 -> 向右 -> 向下 -> 向下
-2. 向下 -> 向下 -> 向右 -> 向右
+* 3x3 网格的正中间有一个障碍物。
+* 从左上角到右下角一共有 2 条不同的路径:
+ 1. 向右 -> 向右 -> 向下 -> 向下
+ 2. 向下 -> 向下 -> 向右 -> 向右
示例 2:

-输入:obstacleGrid = [[0,1],[0,0]]
-输出:1
+* 输入:obstacleGrid = [[0,1],[0,0]]
+* 输出:1
提示:
-
* m == obstacleGrid.length
* n == obstacleGrid[i].length
* 1 <= m, n <= 100
@@ -171,7 +170,7 @@ public:
## 其他语言版本
-Java:
+### Java
```java
class Solution {
@@ -199,7 +198,7 @@ class Solution {
```
-Python:
+### Python
```python
class Solution:
@@ -262,7 +261,7 @@ class Solution:
```
-Go:
+### Go
```go
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
@@ -308,8 +307,8 @@ func uniquePathsWithObstacles(obstacleGrid [][]int) int {
```
-Javascript
-``` Javascript
+### Javascript
+```Javascript
var uniquePathsWithObstacles = function(obstacleGrid) {
const m = obstacleGrid.length
const n = obstacleGrid[0].length
diff --git a/problems/0096.不同的二叉搜索树.md b/problems/0096.不同的二叉搜索树.md
index d4b8d024..48826697 100644
--- a/problems/0096.不同的二叉搜索树.md
+++ b/problems/0096.不同的二叉搜索树.md
@@ -4,7 +4,7 @@
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
-## 96.不同的二叉搜索树
+# 96.不同的二叉搜索树
[力扣题目链接](https://leetcode-cn.com/problems/unique-binary-search-trees/)
@@ -163,7 +163,7 @@ public:
## 其他语言版本
-Java:
+### Java
```Java
class Solution {
public int numTrees(int n) {
@@ -184,7 +184,7 @@ class Solution {
}
```
-Python:
+### Python
```python
class Solution:
def numTrees(self, n: int) -> int:
@@ -196,7 +196,7 @@ class Solution:
return dp[-1]
```
-Go:
+### Go
```Go
func numTrees(n int)int{
dp:=make([]int,n+1)
@@ -210,7 +210,7 @@ func numTrees(n int)int{
}
```
-Javascript:
+### Javascript
```Javascript
const numTrees =(n) => {
let dp = new Array(n+1).fill(0);
diff --git a/problems/0343.整数拆分.md b/problems/0343.整数拆分.md
index 5d11f670..471a7ab7 100644
--- a/problems/0343.整数拆分.md
+++ b/problems/0343.整数拆分.md
@@ -4,23 +4,22 @@
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
-## 343. 整数拆分
+# 343. 整数拆分
[力扣题目链接](https://leetcode-cn.com/problems/integer-break/)
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
示例 1:
-输入: 2
-输出: 1
-
-\解释: 2 = 1 + 1, 1 × 1 = 1。
+* 输入: 2
+* 输出: 1
+* 解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
-输入: 10
-输出: 36
-解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
-说明: 你可以假设 n 不小于 2 且不大于 58。
+* 输入: 10
+* 输出: 36
+* 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
+* 说明: 你可以假设 n 不小于 2 且不大于 58。
## 思路
@@ -193,7 +192,7 @@ public:
## 其他语言版本
-Java:
+### Java
```Java
class Solution {
public int integerBreak(int n) {
@@ -212,7 +211,7 @@ class Solution {
}
```
-Python:
+### Python
```python
class Solution:
def integerBreak(self, n: int) -> int:
@@ -226,7 +225,8 @@ class Solution:
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))
return dp[n]
```
-Go:
+
+### Go
```golang
func integerBreak(n int) int {
/**
@@ -256,7 +256,7 @@ func max(a,b int) int{
}
```
-Javascript:
+### Javascript
```Javascript
var integerBreak = function(n) {
let dp = new Array(n + 1).fill(0)
diff --git a/problems/背包理论基础01背包-1.md b/problems/背包理论基础01背包-1.md
index 4367aff9..6ff32017 100644
--- a/problems/背包理论基础01背包-1.md
+++ b/problems/背包理论基础01背包-1.md
@@ -3,11 +3,12 @@
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
+
# 动态规划:关于01背包问题,你该了解这些!
这周我们正式开始讲解背包问题!
-背包问题的经典资料当然是:背包九讲。在公众号「代码随想录」后台回复:背包九讲,就可以获得背包九讲的PDF。
+背包问题的经典资料当然是:背包九讲。在公众号「代码随想录」后台回复:背包九讲,就可以获得背包九讲的pdf。
但说实话,背包九讲对于小白来说确实不太友好,看起来还是有点费劲的,而且都是伪代码理解起来也吃力。
@@ -32,7 +33,7 @@ leetcode上没有纯01背包的问题,都是01背包应用方面的题目,
## 01 背包
-有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。**每件物品只能用一次**,求解将哪些物品装入背包里物品价值总和最大。
+有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。**每件物品只能用一次**,求解将哪些物品装入背包里物品价值总和最大。

@@ -40,7 +41,7 @@ leetcode上没有纯01背包的问题,都是01背包应用方面的题目,
这样其实是没有从底向上去思考,而是习惯性想到了背包,那么暴力的解法应该是怎么样的呢?
-每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是$O(2^n)$,这里的n表示物品数量。
+每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是$o(2^n)$,这里的n表示物品数量。
**所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!**
@@ -109,7 +110,7 @@ for (int j = 0 ; j < weight[0]; j++) { // 当然这一步,如果把dp数组
dp[0][j] = 0;
}
// 正序遍历
-for (int j = weight[0]; j <= bagWeight; j++) {
+for (int j = weight[0]; j <= bagweight; j++) {
dp[0][j] = value[0];
}
```
@@ -135,8 +136,8 @@ dp[0][j] 和 dp[i][0] 都已经初始化了,那么其他下标应该初始化
```
// 初始化 dp
-vector> dp(weight.size(), vector(bagWeight + 1, 0));
-for (int j = weight[0]; j <= bagWeight; j++) {
+vector> dp(weight.size(), vector(bagweight + 1, 0));
+for (int j = weight[0]; j <= bagweight; j++) {
dp[0][j] = value[0];
}
@@ -160,7 +161,7 @@ for (int j = weight[0]; j <= bagWeight; j++) {
```
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
- for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
+ for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
if (j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
@@ -174,7 +175,7 @@ for(int i = 1; i < weight.size(); i++) { // 遍历物品
```
// weight数组的大小 就是物品个数
-for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
+for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
for(int i = 1; i < weight.size(); i++) { // 遍历物品
if (j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
@@ -219,32 +220,32 @@ dp[i-1][j]和dp[i - 1][j - weight[i]] 都在dp[i][j]的左上角方向(包括
主要就是自己没有动手推导一下dp数组的演变过程,如果推导明白了,代码写出来就算有问题,只要把dp数组打印出来,对比一下和自己推导的有什么差异,很快就可以发现问题了。
-## 完整C++测试代码
+## 完整c++测试代码
-```CPP
+```cpp
void test_2_wei_bag_problem1() {
vector weight = {1, 3, 4};
vector value = {15, 20, 30};
- int bagWeight = 4;
+ int bagweight = 4;
// 二维数组
- vector> dp(weight.size(), vector(bagWeight + 1, 0));
+ vector> dp(weight.size(), vector(bagweight + 1, 0));
// 初始化
- for (int j = weight[0]; j <= bagWeight; j++) {
+ for (int j = weight[0]; j <= bagweight; j++) {
dp[0][j] = value[0];
}
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
- for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
+ for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
if (j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
}
}
- cout << dp[weight.size() - 1][bagWeight] << endl;
+ cout << dp[weight.size() - 1][bagweight] << endl;
}
int main() {
@@ -267,48 +268,45 @@ int main() {
## 其他语言版本
-Java:
+### java
```java
- public static void main(String[] args) {
+ public static void main(string[] args) {
int[] weight = {1, 3, 4};
int[] value = {15, 20, 30};
- int bagSize = 4;
- testWeightBagProblem(weight, value, bagSize);
+ int bagsize = 4;
+ testweightbagproblem(weight, value, bagsize);
}
- public static void testWeightBagProblem(int[] weight, int[] value, int bagSize){
- int wLen = weight.length, value0 = 0;
+ public static void testweightbagproblem(int[] weight, int[] value, int bagsize){
+ int wlen = weight.length, value0 = 0;
//定义dp数组:dp[i][j]表示背包容量为j时,前i个物品能获得的最大价值
- int[][] dp = new int[wLen + 1][bagSize + 1];
+ int[][] dp = new int[wlen + 1][bagsize + 1];
//初始化:背包容量为0时,能获得的价值都为0
- for (int i = 0; i <= wLen; i++){
+ for (int i = 0; i <= wlen; i++){
dp[i][0] = value0;
}
//遍历顺序:先遍历物品,再遍历背包容量
- for (int i = 1; i <= wLen; i++){
- for (int j = 1; j <= bagSize; j++){
+ for (int i = 1; i <= wlen; i++){
+ for (int j = 1; j <= bagsize; j++){
if (j < weight[i - 1]){
dp[i][j] = dp[i - 1][j];
}else{
- dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + value[i - 1]);
+ dp[i][j] = math.max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + value[i - 1]);
}
}
}
//打印dp数组
- for (int i = 0; i <= wLen; i++){
- for (int j = 0; j <= bagSize; j++){
- System.out.print(dp[i][j] + " ");
+ for (int i = 0; i <= wlen; i++){
+ for (int j = 0; j <= bagsize; j++){
+ system.out.print(dp[i][j] + " ");
}
- System.out.print("\n");
+ system.out.print("\n");
}
}
```
-
-
-
-Python:
+### python
```python
def test_2_wei_bag_problem1(bag_size, weight, value) -> int:
rows, cols = len(weight), bag_size + 1
@@ -343,26 +341,26 @@ if __name__ == "__main__":
```
-Go:
+### go
```go
-func test_2_wei_bag_problem1(weight, value []int, bagWeight int) int {
+func test_2_wei_bag_problem1(weight, value []int, bagweight int) int {
// 定义dp数组
dp := make([][]int, len(weight))
for i, _ := range dp {
- dp[i] = make([]int, bagWeight+1)
+ dp[i] = make([]int, bagweight+1)
}
// 初始化
- for j := bagWeight; j >= weight[0]; j-- {
+ for j := bagweight; j >= weight[0]; j-- {
dp[0][j] = dp[0][j-weight[0]] + value[0]
}
// 递推公式
for i := 1; i < len(weight); i++ {
//正序,也可以倒序
- for j := weight[i];j<= bagWeight ; j++ {
+ for j := weight[i];j<= bagweight ; j++ {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])
}
}
- return dp[len(weight)-1][bagWeight]
+ return dp[len(weight)-1][bagweight]
}
func max(a,b int) int {
@@ -379,19 +377,19 @@ func main() {
}
```
-javaScript:
+### javascript
```js
-function testWeightBagProblem (wight, value, size) {
+function testweightbagproblem (wight, value, size) {
const len = wight.length,
- dp = Array.from({length: len + 1}).map(
- () => Array(size + 1).fill(0)
+ dp = array.from({length: len + 1}).map(
+ () => array(size + 1).fill(0)
);
for(let i = 1; i <= len; i++) {
for(let j = 0; j <= size; j++) {
if(wight[i - 1] <= j) {
- dp[i][j] = Math.max(
+ dp[i][j] = math.max(
dp[i - 1][j],
value[i - 1] + dp[i - 1][j - wight[i - 1]]
)
From d29fa29a87e8e5b2739f5033423cc6666d1ced42 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 21 Jan 2022 14:16:33 +0800
Subject: [PATCH 02/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880232.=E7=94=A8?=
=?UTF-8?q?=E6=A0=88=E5=AE=9E=E7=8E=B0=E9=98=9F=E5=88=97.md=EF=BC=89?=
=?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0232.用栈实现队列.md | 37 +++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/problems/0232.用栈实现队列.md b/problems/0232.用栈实现队列.md
index 4edba2f2..33ce8114 100644
--- a/problems/0232.用栈实现队列.md
+++ b/problems/0232.用栈实现队列.md
@@ -348,7 +348,44 @@ MyQueue.prototype.empty = function() {
};
```
+TypeScript:
+
+```typescript
+class MyQueue {
+ private stackIn: number[]
+ private stackOut: number[]
+ constructor() {
+ this.stackIn = [];
+ this.stackOut = [];
+ }
+
+ push(x: number): void {
+ this.stackIn.push(x);
+ }
+
+ pop(): number {
+ if (this.stackOut.length === 0) {
+ while (this.stackIn.length > 0) {
+ this.stackOut.push(this.stackIn.pop()!);
+ }
+ }
+ return this.stackOut.pop()!;
+ }
+
+ peek(): number {
+ let temp: number = this.pop();
+ this.stackOut.push(temp);
+ return temp;
+ }
+
+ empty(): boolean {
+ return this.stackIn.length === 0 && this.stackOut.length === 0;
+ }
+}
+```
+
Swift:
+
```swift
class MyQueue {
From 2f6aa72964593420158bf8e4c393ea56ed053dd6 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Sat, 22 Jan 2022 17:45:40 +0800
Subject: [PATCH 03/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=881047.=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8=AD=E7=9A=84=E6=89=80?=
=?UTF-8?q?=E6=9C=89=E7=9B=B8=E9=82=BB=E9=87=8D=E5=A4=8D=E9=A1=B9.md?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...除字符串中的所有相邻重复项.md | 24 +++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/problems/1047.删除字符串中的所有相邻重复项.md b/problems/1047.删除字符串中的所有相邻重复项.md
index d6eefd07..9a0bb1c1 100644
--- a/problems/1047.删除字符串中的所有相邻重复项.md
+++ b/problems/1047.删除字符串中的所有相邻重复项.md
@@ -267,8 +267,32 @@ var removeDuplicates = function(s) {
};
```
+TypeScript:
+
+```typescript
+function removeDuplicates(s: string): string {
+ const helperStack: string[] = [];
+ let i: number = 0;
+ while (i < s.length) {
+ let top: string = helperStack[helperStack.length - 1];
+ if (top === s[i]) {
+ helperStack.pop();
+ } else {
+ helperStack.push(s[i]);
+ }
+ i++;
+ }
+ let res: string = '';
+ while (helperStack.length > 0) {
+ res = helperStack.pop() + res;
+ }
+ return res;
+};
+```
+
C:
方法一:使用栈
+
```c
char * removeDuplicates(char * s){
//求出字符串长度
From 3fb923694db6cdd6a1b38f16cfcc294bfa415876 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Sat, 22 Jan 2022 22:20:24 +0800
Subject: [PATCH 04/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880150.=E9=80=86?=
=?UTF-8?q?=E6=B3=A2=E5=85=B0=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=B1=82=E5=80=BC?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0150.逆波兰表达式求值.md | 65 +++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/problems/0150.逆波兰表达式求值.md b/problems/0150.逆波兰表达式求值.md
index f44703f1..f4dad823 100644
--- a/problems/0150.逆波兰表达式求值.md
+++ b/problems/0150.逆波兰表达式求值.md
@@ -210,6 +210,71 @@ var evalRPN = function(tokens) {
};
```
+TypeScript:
+
+普通版:
+
+```typescript
+function evalRPN(tokens: string[]): number {
+ let helperStack: number[] = [];
+ let temp: number;
+ let i: number = 0;
+ while (i < tokens.length) {
+ let t: string = tokens[i];
+ switch (t) {
+ case '+':
+ temp = helperStack.pop()! + helperStack.pop()!;
+ helperStack.push(temp);
+ break;
+ case '-':
+ temp = helperStack.pop()!;
+ temp = helperStack.pop()! - temp;
+ helperStack.push(temp);
+ break;
+ case '*':
+ temp = helperStack.pop()! * helperStack.pop()!;
+ helperStack.push(temp);
+ break;
+ case '/':
+ temp = helperStack.pop()!;
+ temp = Math.trunc(helperStack.pop()! / temp);
+ helperStack.push(temp);
+ break;
+ default:
+ helperStack.push(Number(t));
+ break;
+ }
+ i++;
+ }
+ return helperStack.pop()!;
+};
+```
+
+优化版:
+
+```typescript
+function evalRPN(tokens: string[]): number {
+ const helperStack: number[] = [];
+ const operatorMap: Map number> = new Map([
+ ['+', (a, b) => a + b],
+ ['-', (a, b) => a - b],
+ ['/', (a, b) => Math.trunc(a / b)],
+ ['*', (a, b) => a * b],
+ ]);
+ let a: number, b: number;
+ for (let t of tokens) {
+ if (operatorMap.has(t)) {
+ b = helperStack.pop()!;
+ a = helperStack.pop()!;
+ helperStack.push(operatorMap.get(t)!(a, b));
+ } else {
+ helperStack.push(Number(t));
+ }
+ }
+ return helperStack.pop()!;
+};
+```
+
python3
```python
From b3078ef51c321e386f5900e4f43c3b2c68dd0ca0 Mon Sep 17 00:00:00 2001
From: zhicheng lee <904688436@qq.com>
Date: Sun, 23 Jan 2022 22:59:59 +0800
Subject: [PATCH 05/38] =?UTF-8?q?Update=200435.=E6=97=A0=E9=87=8D=E5=8F=A0?=
=?UTF-8?q?=E5=8C=BA=E9=97=B4.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
更新Java版本代码
---
problems/0435.无重叠区间.md | 28 +++++++++++-----------------
1 file changed, 11 insertions(+), 17 deletions(-)
diff --git a/problems/0435.无重叠区间.md b/problems/0435.无重叠区间.md
index 118360bc..389443d1 100644
--- a/problems/0435.无重叠区间.md
+++ b/problems/0435.无重叠区间.md
@@ -183,28 +183,22 @@ public:
```java
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
- if (intervals.length < 2) return 0;
-
- Arrays.sort(intervals, new Comparator() {
- @Override
- public int compare(int[] o1, int[] o2) {
- if (o1[1] != o2[1]) {
- return Integer.compare(o1[1],o2[1]);
- } else {
- return Integer.compare(o1[0],o2[0]);
- }
- }
+ Arrays.sort(intervals, (a, b) -> {
+ if (a[0] == a[0]) return a[1] - b[1];
+ return a[0] - b[0];
});
- int count = 1;
- int edge = intervals[0][1];
- for (int i = 1; i < intervals.length; i++) {
- if (edge <= intervals[i][0]){
- count ++; //non overlap + 1
+ int count = 0;
+ int edge = Integer.MIN_VALUE;
+ for (int i = 0; i < intervals.length; i++) {
+ if (edge <= intervals[i][0]) {
edge = intervals[i][1];
+ } else {
+ count++;
}
}
- return intervals.length - count;
+
+ return count;
}
}
```
From ac9f8c612033d87221e1fc79ce093211a1f5570b Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 15:51:26 +0800
Subject: [PATCH 06/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880239.=E6=BB=91?=
=?UTF-8?q?=E5=8A=A8=E7=AA=97=E5=8F=A3=E6=9C=80=E5=A4=A7=E5=80=BC.md?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0239.滑动窗口最大值.md | 49 ++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/problems/0239.滑动窗口最大值.md b/problems/0239.滑动窗口最大值.md
index d9788f63..6e8039f4 100644
--- a/problems/0239.滑动窗口最大值.md
+++ b/problems/0239.滑动窗口最大值.md
@@ -418,7 +418,56 @@ var maxSlidingWindow = function (nums, k) {
};
```
+TypeScript:
+
+```typescript
+function maxSlidingWindow(nums: number[], k: number): number[] {
+ /** 单调递减队列 */
+ class MonoQueue {
+ private queue: number[];
+ constructor() {
+ this.queue = [];
+ };
+ /** 入队:value如果大于队尾元素,则将队尾元素删除,直至队尾元素大于value,或者队列为空 */
+ public enqueue(value: number): void {
+ let back: number | undefined = this.queue[this.queue.length - 1];
+ while (back !== undefined && back < value) {
+ this.queue.pop();
+ back = this.queue[this.queue.length - 1];
+ }
+ this.queue.push(value);
+ };
+ /** 出队:只有当队头元素等于value,才出队 */
+ public dequeue(value: number): void {
+ let top: number | undefined = this.top();
+ if (top !== undefined && top === value) {
+ this.queue.shift();
+ }
+ }
+ public top(): number | undefined {
+ return this.queue[0];
+ }
+ }
+ const helperQueue: MonoQueue = new MonoQueue();
+ let i: number = 0,
+ j: number = 0;
+ let resArr: number[] = [];
+ while (j < k) {
+ helperQueue.enqueue(nums[j++]);
+ }
+ resArr.push(helperQueue.top()!);
+ while (j < nums.length) {
+ helperQueue.enqueue(nums[j]);
+ helperQueue.dequeue(nums[i]);
+ resArr.push(helperQueue.top()!);
+ j++, i++;
+ }
+ return resArr;
+};
+```
+
Swift:
+
```Swift
/// 双向链表
class DoublyListNode {
From a12ad31f46c082f35a88441d65ef322740d12520 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 16:03:36 +0800
Subject: [PATCH 07/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=880239.=E6=BB=91?=
=?UTF-8?q?=E5=8A=A8=E7=AA=97=E5=8F=A3=E6=9C=80=E5=A4=A7=E5=80=BC.md?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E8=A7=84=E8=8C=83=E5=8C=96js=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0239.滑动窗口最大值.md | 57 ++++++++++++++++++--------
1 file changed, 40 insertions(+), 17 deletions(-)
diff --git a/problems/0239.滑动窗口最大值.md b/problems/0239.滑动窗口最大值.md
index 6e8039f4..adf3548c 100644
--- a/problems/0239.滑动窗口最大值.md
+++ b/problems/0239.滑动窗口最大值.md
@@ -395,26 +395,49 @@ func maxSlidingWindow(nums []int, k int) []int {
Javascript:
```javascript
+/**
+ * @param {number[]} nums
+ * @param {number} k
+ * @return {number[]}
+ */
var maxSlidingWindow = function (nums, k) {
- // 队列数组(存放的是元素下标,为了取值方便)
- const q = [];
- // 结果数组
- const ans = [];
- for (let i = 0; i < nums.length; i++) {
- // 若队列不为空,且当前元素大于等于队尾所存下标的元素,则弹出队尾
- while (q.length && nums[i] >= nums[q[q.length - 1]]) {
- q.pop();
+ class MonoQueue {
+ queue;
+ constructor() {
+ this.queue = [];
+ }
+ enqueue(value) {
+ let back = this.queue[this.queue.length - 1];
+ while (back !== undefined && back < value) {
+ this.queue.pop();
+ back = this.queue[this.queue.length - 1];
+ }
+ this.queue.push(value);
+ }
+ dequeue(value) {
+ let front = this.front();
+ if (front === value) {
+ this.queue.shift();
+ }
+ }
+ front() {
+ return this.queue[0];
+ }
}
- // 入队当前元素下标
- q.push(i);
- // 判断当前最大值(即队首元素)是否在窗口中,若不在便将其出队
- if (q[0] <= i - k) {
- q.shift();
+ let helperQueue = new MonoQueue();
+ let i = 0, j = 0;
+ let resArr = [];
+ while (j < k) {
+ helperQueue.enqueue(nums[j++]);
}
- // 当达到窗口大小时便开始向结果中添加数据
- if (i >= k - 1) ans.push(nums[q[0]]);
- }
- return ans;
+ resArr.push(helperQueue.front());
+ while (j < nums.length) {
+ helperQueue.enqueue(nums[j]);
+ helperQueue.dequeue(nums[i]);
+ resArr.push(helperQueue.front());
+ i++, j++;
+ }
+ return resArr;
};
```
From 60c3a27ce9537d7361e4927b21129bf77be507ba Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 17:39:34 +0800
Subject: [PATCH 08/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880347.=E5=89=8D?=
=?UTF-8?q?K=E4=B8=AA=E9=AB=98=E9=A2=91=E5=85=83=E7=B4=A0.md=EF=BC=89?=
=?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0347.前K个高频元素.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/problems/0347.前K个高频元素.md b/problems/0347.前K个高频元素.md
index 8bd774e9..1d6a358b 100644
--- a/problems/0347.前K个高频元素.md
+++ b/problems/0347.前K个高频元素.md
@@ -358,6 +358,22 @@ PriorityQueue.prototype.compare = function(index1, index2) {
}
```
+TypeScript:
+
+```typescript
+function topKFrequent(nums: number[], k: number): number[] {
+ const countMap: Map = new Map();
+ for (let num of nums) {
+ countMap.set(num, (countMap.get(num) || 0) + 1);
+ }
+ // tS没有最小堆的数据结构,所以直接对整个数组进行排序,取前k个元素
+ return [...countMap.entries()]
+ .sort((a, b) => b[1] - a[1])
+ .slice(0, k)
+ .map(i => i[0]);
+};
+```
+
-----------------------
From de37c44f4fbc6b368f1afe6a51e508c949ff9271 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 19:41:17 +0800
Subject: [PATCH 09/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=80.md?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/二叉树理论基础.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/problems/二叉树理论基础.md b/problems/二叉树理论基础.md
index cc899850..009e8276 100644
--- a/problems/二叉树理论基础.md
+++ b/problems/二叉树理论基础.md
@@ -227,7 +227,23 @@ function TreeNode(val, left, right) {
}
```
+TypeScript:
+
+```typescript
+class TreeNode {
+ public val: number;
+ public left: TreeNode | null;
+ public right: TreeNode | null;
+ constructor(val?: number, left?: TreeNode, right?: TreeNode) {
+ this.val = val === undefined ? 0 : val;
+ this.left = left === undefined ? null : left;
+ this.right = right === undefined ? null : right;
+ }
+}
+```
+
Swift:
+
```Swift
class TreeNode {
var value: T
From a488a3414a8c0e3408678f8393b116837e6240ea Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 20:25:45 +0800
Subject: [PATCH 10/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E9=80=92=E5=BD=92=E9=81=8D=E5=8E=86?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/二叉树的递归遍历.md | 44 ++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/problems/二叉树的递归遍历.md b/problems/二叉树的递归遍历.md
index 4beed650..ba13fc74 100644
--- a/problems/二叉树的递归遍历.md
+++ b/problems/二叉树的递归遍历.md
@@ -358,7 +358,51 @@ var postorderTraversal = function(root) {
};
```
+TypeScript:
+
+```typescript
+// 前序遍历
+function preorderTraversal(node: TreeNode | null): number[] {
+ function traverse(node: TreeNode | null, res: number[]): void {
+ if (node === null) return;
+ res.push(node.val);
+ traverse(node.left, res);
+ traverse(node.right, res);
+ }
+ const res: number[] = [];
+ traverse(node, res);
+ return res;
+}
+
+// 中序遍历
+function inorderTraversal(node: TreeNode | null): number[] {
+ function traverse(node: TreeNode | null, res: number[]): void {
+ if (node === null) return;
+ traverse(node.left, res);
+ res.push(node.val);
+ traverse(node.right, res);
+ }
+ const res: number[] = [];
+ traverse(node, res);
+ return res;
+}
+
+// 后序遍历
+function postorderTraversal(node: TreeNode | null): number[] {
+ function traverse(node: TreeNode | null, res: number[]): void {
+ if (node === null) return;
+ traverse(node.left, res);
+ traverse(node.right, res);
+ res.push(node.val);
+ }
+ const res: number[] = [];
+ traverse(node, res);
+ return res;
+}
+```
+
C:
+
```c
//前序遍历:
void preOrderTraversal(struct TreeNode* root, int* ret, int* returnSize) {
From fec8e0882a771ea5866e0611c01874d6850654e6 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 24 Jan 2022 20:27:15 +0800
Subject: [PATCH 11/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E9=80=92=E5=BD=92=E9=81=8D=E5=8E=86?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?=
=?UTF-8?q?=E7=9A=84js=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/二叉树的递归遍历.md | 34 ----------------------------
1 file changed, 34 deletions(-)
diff --git a/problems/二叉树的递归遍历.md b/problems/二叉树的递归遍历.md
index ba13fc74..c481fd11 100644
--- a/problems/二叉树的递归遍历.md
+++ b/problems/二叉树的递归遍历.md
@@ -270,40 +270,6 @@ func postorderTraversal(root *TreeNode) (res []int) {
}
```
-javaScript:
-
-```js
-
-前序遍历:
-
-var preorderTraversal = function(root, res = []) {
- if (!root) return res;
- res.push(root.val);
- preorderTraversal(root.left, res)
- preorderTraversal(root.right, res)
- return res;
-};
-
-中序遍历:
-
-var inorderTraversal = function(root, res = []) {
- if (!root) return res;
- inorderTraversal(root.left, res);
- res.push(root.val);
- inorderTraversal(root.right, res);
- return res;
-};
-
-后序遍历:
-
-var postorderTraversal = function(root, res = []) {
- if (!root) return res;
- postorderTraversal(root.left, res);
- postorderTraversal(root.right, res);
- res.push(root.val);
- return res;
-};
-```
Javascript版本:
前序遍历:
From 1efb77e96310d884eb2b8647232dd1586f4f0afb Mon Sep 17 00:00:00 2001
From: zucong
Date: Tue, 25 Jan 2022 14:33:12 +0800
Subject: [PATCH 12/38] =?UTF-8?q?=E4=BC=98=E5=8C=96=200112.=E8=B7=AF?=
=?UTF-8?q?=E5=BE=84=E6=80=BB=E5=92=8C=20Go=E7=89=88=E6=9C=AC=E8=A7=A3?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0112.路径总和.md | 101 ++++++++++++++--------------------
1 file changed, 41 insertions(+), 60 deletions(-)
diff --git a/problems/0112.路径总和.md b/problems/0112.路径总和.md
index 910e57c8..b3e121ba 100644
--- a/problems/0112.路径总和.md
+++ b/problems/0112.路径总和.md
@@ -531,82 +531,63 @@ class solution:
```go
//递归法
/**
- * definition for a binary tree node.
- * type treenode struct {
- * val int
- * left *treenode
- * right *treenode
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ * Val int
+ * Left *TreeNode
+ * Right *TreeNode
* }
*/
-func haspathsum(root *treenode, targetsum int) bool {
- var flage bool //找没找到的标志
- if root==nil{
- return flage
+func hasPathSum(root *TreeNode, targetSum int) bool {
+ if root == nil {
+ return false
}
- pathsum(root,0,targetsum,&flage)
- return flage
-}
-func pathsum(root *treenode, sum int,targetsum int,flage *bool){
- sum+=root.val
- if root.left==nil&&root.right==nil&&sum==targetsum{
- *flage=true
- return
- }
- if root.left!=nil&&!(*flage){//左节点不为空且还没找到
- pathsum(root.left,sum,targetsum,flage)
- }
- if root.right!=nil&&!(*flage){//右节点不为空且没找到
- pathsum(root.right,sum,targetsum,flage)
+
+ targetSum -= root.Val // 将targetSum在遍历每层的时候都减去本层节点的值
+ if root.Left == nil && root.Right == nil && targetSum == 0 { // 如果剩余的targetSum为0, 则正好就是符合的结果
+ return true
}
+ return hasPathSum(root.Left, targetSum) || hasPathSum(root.Right, targetSum) // 否则递归找
}
```
-113 递归法
+113. 路径总和 II
```go
/**
- * definition for a binary tree node.
- * type treenode struct {
- * val int
- * left *treenode
- * right *treenode
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ * Val int
+ * Left *TreeNode
+ * Right *TreeNode
* }
*/
-func pathsum(root *treenode, targetsum int) [][]int {
- var result [][]int//最终结果
- if root==nil{
- return result
- }
- var sumnodes []int//经过路径的节点集合
- haspathsum(root,&sumnodes,targetsum,&result)
+func pathSum(root *TreeNode, targetSum int) [][]int {
+ result := make([][]int, 0)
+ traverse(root, &result, new([]int), targetSum)
return result
}
-func haspathsum(root *treenode,sumnodes *[]int,targetsum int,result *[][]int){
- *sumnodes=append(*sumnodes,root.val)
- if root.left==nil&&root.right==nil{//叶子节点
- fmt.println(*sumnodes)
- var sum int
- var number int
- for k,v:=range *sumnodes{//求该路径节点的和
- sum+=v
- number=k
- }
- tempnodes:=make([]int,number+1)//新的nodes接受指针里的值,防止最终指针里的值发生变动,导致最后的结果都是最后一个sumnodes的值
- for k,v:=range *sumnodes{
- tempnodes[k]=v
- }
- if sum==targetsum{
- *result=append(*result,tempnodes)
- }
+
+func traverse(node *TreeNode, result *[][]int, currPath *[]int, targetSum int) {
+ if node == nil { // 这个判空也可以挪到递归遍历左右子树时去判断
+ return
}
- if root.left!=nil{
- haspathsum(root.left,sumnodes,targetsum,result)
- *sumnodes=(*sumnodes)[:len(*sumnodes)-1]//回溯
- }
- if root.right!=nil{
- haspathsum(root.right,sumnodes,targetsum,result)
- *sumnodes=(*sumnodes)[:len(*sumnodes)-1]//回溯
+
+ targetSum -= node.Val // 将targetSum在遍历每层的时候都减去本层节点的值
+ *currPath = append(*currPath, node.Val) // 把当前节点放到路径记录里
+
+ if node.Left == nil && node.Right == nil && targetSum == 0 { // 如果剩余的targetSum为0, 则正好就是符合的结果
+ // 不能直接将currPath放到result里面, 因为currPath是共享的, 每次遍历子树时都会被修改
+ pathCopy := make([]int, len(*currPath))
+ for i, element := range *currPath {
+ pathCopy[i] = element
+ }
+ *result = append(*result, pathCopy) // 将副本放到结果集里
}
+
+ traverse(node.Left, result, currPath, targetSum)
+ traverse(node.Right, result, currPath, targetSum)
+ *currPath = (*currPath)[:len(*currPath)-1] // 当前节点遍历完成, 从路径记录里删除掉
}
```
From d40a15eccca9212f701c4602a514168ab52fecf6 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Wed, 26 Jan 2022 10:40:30 +0800
Subject: [PATCH 13/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E8=BF=AD=E4=BB=A3=E9=81=8D=E5=8E=86?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/二叉树的迭代遍历.md | 55 ++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/problems/二叉树的迭代遍历.md b/problems/二叉树的迭代遍历.md
index 4cb94cb5..ba38726b 100644
--- a/problems/二叉树的迭代遍历.md
+++ b/problems/二叉树的迭代遍历.md
@@ -454,6 +454,61 @@ var postorderTraversal = function(root, res = []) {
};
```
+TypeScript:
+
+```typescript
+// 前序遍历(迭代法)
+function preorderTraversal(root: TreeNode | null): number[] {
+ if (root === null) return [];
+ let res: number[] = [];
+ let helperStack: TreeNode[] = [];
+ let curNode: TreeNode = root;
+ helperStack.push(curNode);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ }
+ return res;
+};
+
+// 中序遍历(迭代法)
+function inorderTraversal(root: TreeNode | null): number[] {
+ let helperStack: TreeNode[] = [];
+ let res: number[] = [];
+ if (root === null) return res;
+ let curNode: TreeNode | null = root;
+ while (curNode !== null || helperStack.length > 0) {
+ if (curNode !== null) {
+ helperStack.push(curNode);
+ curNode = curNode.left;
+ } else {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ curNode = curNode.right;
+ }
+ }
+ return res;
+};
+
+// 后序遍历(迭代法)
+function postorderTraversal(root: TreeNode | null): number[] {
+ let helperStack: TreeNode[] = [];
+ let res: number[] = [];
+ let curNode: TreeNode;
+ if (root === null) return res;
+ helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ }
+ return res.reverse();
+};
+```
+
Swift:
> 迭代法前序遍历
From 7ed2a3aef7b10b48fe7f8127f185f4a6efc9952c Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Wed, 26 Jan 2022 19:18:23 +0800
Subject: [PATCH 14/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E7=BB=9F=E4=B8=80=E8=BF=AD=E4=BB=A3?=
=?UTF-8?q?=E6=B3=95.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript?=
=?UTF-8?q?=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/二叉树的统一迭代法.md | 68 +++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/problems/二叉树的统一迭代法.md b/problems/二叉树的统一迭代法.md
index 2ff84817..f6edf586 100644
--- a/problems/二叉树的统一迭代法.md
+++ b/problems/二叉树的统一迭代法.md
@@ -522,7 +522,75 @@ var postorderTraversal = function(root, res = []) {
```
+TypeScript:
+```typescript
+// 前序遍历(迭代法)
+function preorderTraversal(root: TreeNode | null): number[] {
+ let helperStack: (TreeNode | null)[] = [];
+ let res: number[] = [];
+ let curNode: TreeNode | null;
+ if (root === null) return res;
+ helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ if (curNode !== null) {
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ helperStack.push(curNode);
+ helperStack.push(null);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ } else {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ }
+ }
+ return res;
+};
+
+// 中序遍历(迭代法)
+function inorderTraversal(root: TreeNode | null): number[] {
+ let helperStack: (TreeNode | null)[] = [];
+ let res: number[] = [];
+ let curNode: TreeNode | null;
+ if (root === null) return res;
+ helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ if (curNode !== null) {
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ helperStack.push(curNode);
+ helperStack.push(null);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ } else {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ }
+ }
+ return res;
+};
+
+// 后序遍历(迭代法)
+function postorderTraversal(root: TreeNode | null): number[] {
+ let helperStack: (TreeNode | null)[] = [];
+ let res: number[] = [];
+ let curNode: TreeNode | null;
+ if (root === null) return res;
+ helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ if (curNode !== null) {
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ helperStack.push(curNode);
+ helperStack.push(null);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ } else {
+ curNode = helperStack.pop()!;
+ res.push(curNode.val);
+ }
+ }
+ return res;
+};
+```
-----------------------
From 878231551829fdd9deea2f2457eb09b794d7ed65 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Wed, 26 Jan 2022 21:20:36 +0800
Subject: [PATCH 15/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880102.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E5=B1=82=E5=BA=8F=E9=81=8D=E5=8E=86?=
=?UTF-8?q?.md=20&=20107.=E4=BA=8C=E5=8F=89=E6=A0=91=E7=9A=84=E5=B1=82?=
=?UTF-8?q?=E6=AC=A1=E9=81=8D=E5=8E=86=20II=EF=BC=89=EF=BC=9A=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 52 +++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 1fb9b633..b108c8f0 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -246,7 +246,35 @@ var levelOrder = function(root) {
```
+TypeScript:
+
+```typescript
+function levelOrder(root: TreeNode | null): number[][] {
+ let helperQueue: TreeNode[] = [];
+ let res: number[][] = [];
+ let tempArr: number[] = [];
+ if (root !== null) helperQueue.push(root);
+ let curNode: TreeNode;
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ curNode = helperQueue.shift()!;
+ tempArr.push(curNode.val);
+ if (curNode.left !== null) {
+ helperQueue.push(curNode.left);
+ }
+ if (curNode.right !== null) {
+ helperQueue.push(curNode.right);
+ }
+ }
+ res.push(tempArr);
+ tempArr = [];
+ }
+ return res;
+};
+```
+
Swift:
+
```swift
func levelOrder(_ root: TreeNode?) -> [[Int]] {
var res = [[Int]]()
@@ -454,7 +482,31 @@ var levelOrderBottom = function(root) {
};
```
+TypeScript:
+
+```typescript
+function levelOrderBottom(root: TreeNode | null): number[][] {
+ let helperQueue: TreeNode[] = [];
+ let resArr: number[][] = [];
+ let tempArr: number[] = [];
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ tempArr.push(tempNode.val);
+ if (tempNode.left !== null) helperQueue.push(tempNode.left);
+ if (tempNode.right !== null) helperQueue.push(tempNode.right);
+ }
+ resArr.push(tempArr);
+ tempArr = [];
+ }
+ return resArr.reverse();
+};
+```
+
Swift:
+
```swift
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
var res = [[Int]]()
From e177bca526cd33ff4dce70b188f2214598941b0e Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Thu, 27 Jan 2022 22:35:30 +0800
Subject: [PATCH 16/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88199.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E5=8F=B3=E8=A7=86=E5=9B=BE=EF=BC=89?=
=?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index b108c8f0..18e19227 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -709,7 +709,28 @@ var rightSideView = function(root) {
};
```
+TypeScript:
+
+```typescript
+function rightSideView(root: TreeNode | null): number[] {
+ let helperQueue: TreeNode[] = [];
+ let resArr: number[] = [];
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (i === length - 1) resArr.push(tempNode.val);
+ if (tempNode.left !== null) helperQueue.push(tempNode.left);
+ if (tempNode.right !== null) helperQueue.push(tempNode.right);
+ }
+ }
+ return resArr;
+};
+```
+
Swift:
+
```swift
func rightSideView(_ root: TreeNode?) -> [Int] {
var res = [Int]()
From daf710bde6eb82f2c5b2a87254ca9860d79af80e Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 11:32:57 +0800
Subject: [PATCH 17/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88637.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E5=B1=82=E5=B9=B3=E5=9D=87=E5=80=BC?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 25 +++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 18e19227..9ff4f2e9 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -941,7 +941,32 @@ var averageOfLevels = function(root) {
};
```
+TypeScript:
+
+```typescript
+function averageOfLevels(root: TreeNode | null): number[] {
+ let helperQueue: TreeNode[] = [];
+ let resArr: number[] = [];
+ let total: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ let length = helperQueue.length;
+ for (let i = 0; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ total += tempNode.val;
+ if (tempNode.left) helperQueue.push(tempNode.left);
+ if (tempNode.right) helperQueue.push(tempNode.right);
+ }
+ resArr.push(total / length);
+ total = 0;
+ }
+ return resArr;
+};
+```
+
Swift:
+
```swift
func averageOfLevels(_ root: TreeNode?) -> [Double] {
var res = [Double]()
From 2862d47368512a9cbc7e7184775d99d8e53f72df Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 11:44:49 +0800
Subject: [PATCH 18/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88429.N=E5=8F=89?=
=?UTF-8?q?=E6=A0=91=E7=9A=84=E5=B1=82=E5=BA=8F=E9=81=8D=E5=8E=86=EF=BC=89?=
=?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 9ff4f2e9..5dd448b7 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -1190,7 +1190,30 @@ var levelOrder = function(root) {
};
```
+TypeScript:
+
+```typescript
+function levelOrder(root: Node | null): number[][] {
+ let helperQueue: Node[] = [];
+ let resArr: number[][] = [];
+ let tempArr: number[] = [];
+ if (root !== null) helperQueue.push(root);
+ let curNode: Node;
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ curNode = helperQueue.shift()!;
+ tempArr.push(curNode.val);
+ helperQueue.push(...curNode.children);
+ }
+ resArr.push(tempArr);
+ tempArr = [];
+ }
+ return resArr;
+};
+```
+
Swift:
+
```swift
func levelOrder(_ root: Node?) -> [[Int]] {
var res = [[Int]]()
From 9329ecff5e95e5bc1e8cb17fbba1135765fd3286 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 12:02:15 +0800
Subject: [PATCH 19/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88515.=E5=9C=A8?=
=?UTF-8?q?=E6=AF=8F=E4=B8=AA=E6=A0=91=E8=A1=8C=E4=B8=AD=E6=89=BE=E6=9C=80?=
=?UTF-8?q?=E5=A4=A7=E5=80=BC=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescrip?=
=?UTF-8?q?t=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 27 +++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 5dd448b7..6f90cb75 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -1393,7 +1393,34 @@ var largestValues = function(root) {
};
```
+TypeScript:
+
+```typescript
+function largestValues(root: TreeNode | null): number[] {
+ let helperQueue: TreeNode[] = [];
+ let resArr: number[] = [];
+ let tempNode: TreeNode;
+ let max: number = 0;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (i === 0) {
+ max = tempNode.val;
+ } else {
+ max = max > tempNode.val ? max : tempNode.val;
+ }
+ if (tempNode.left) helperQueue.push(tempNode.left);
+ if (tempNode.right) helperQueue.push(tempNode.right);
+ }
+ resArr.push(max);
+ }
+ return resArr;
+};
+```
+
Swift:
+
```swift
func largestValues(_ root: TreeNode?) -> [Int] {
var res = [Int]()
From 992cd6d7f3bc2b0065bf8f3f3ff064a13c66dde3 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 16:10:56 +0800
Subject: [PATCH 20/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88116.=E5=A1=AB?=
=?UTF-8?q?=E5=85=85=E6=AF=8F=E4=B8=AA=E8=8A=82=E7=82=B9=E7=9A=84=E4=B8=8B?=
=?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=8F=B3=E4=BE=A7=E8=8A=82=E7=82=B9=E6=8C=87?=
=?UTF-8?q?=E9=92=88=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript?=
=?UTF-8?q?=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 25 +++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 6f90cb75..12f96469 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -1611,6 +1611,31 @@ var connect = function(root) {
};
```
+TypeScript:
+
+```typescript
+function connect(root: Node | null): Node | null {
+ let helperQueue: Node[] = [];
+ let preNode: Node, curNode: Node;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ if (i === 0) {
+ preNode = helperQueue.shift()!;
+ } else {
+ curNode = helperQueue.shift()!;
+ preNode.next = curNode;
+ preNode = curNode;
+ }
+ if (preNode.left) helperQueue.push(preNode.left);
+ if (preNode.right) helperQueue.push(preNode.right);
+ }
+ preNode.next = null;
+ }
+ return root;
+};
+```
+
go:
```GO
From d1abb0cbb4397a950479788497e3ec21adbcea22 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 16:21:25 +0800
Subject: [PATCH 21/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88117.=E5=A1=AB?=
=?UTF-8?q?=E5=85=85=E6=AF=8F=E4=B8=AA=E8=8A=82=E7=82=B9=E7=9A=84=E4=B8=8B?=
=?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=8F=B3=E4=BE=A7=E8=8A=82=E7=82=B9=E6=8C=87?=
=?UTF-8?q?=E9=92=88II=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript?=
=?UTF-8?q?=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 25 +++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 12f96469..a7716d92 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -1862,6 +1862,31 @@ var connect = function(root) {
return root;
};
```
+TypeScript:
+
+```typescript
+function connect(root: Node | null): Node | null {
+ let helperQueue: Node[] = [];
+ let preNode: Node, curNode: Node;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ if (i === 0) {
+ preNode = helperQueue.shift()!;
+ } else {
+ curNode = helperQueue.shift()!;
+ preNode.next = curNode;
+ preNode = curNode;
+ }
+ if (preNode.left) helperQueue.push(preNode.left);
+ if (preNode.right) helperQueue.push(preNode.right);
+ }
+ preNode.next = null;
+ }
+ return root;
+};
+```
+
go:
```GO
From bdb0954e32976832b9bd99dd2dcb2744d55e665b Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 17:11:11 +0800
Subject: [PATCH 22/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88104.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E6=9C=80=E5=A4=A7=E6=B7=B1=E5=BA=A6?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index a7716d92..9ac23fdf 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -2131,7 +2131,28 @@ var maxDepth = function(root) {
};
```
+TypeScript:
+
+```typescript
+function maxDepth(root: TreeNode | null): number {
+ let helperQueue: TreeNode[] = [];
+ let resDepth: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ resDepth++;
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (tempNode.left) helperQueue.push(tempNode.left);
+ if (tempNode.right) helperQueue.push(tempNode.right);
+ }
+ }
+ return resDepth;
+};
+```
+
Swift:
+
```swift
func maxDepth(_ root: TreeNode?) -> Int {
guard let root = root else {
From 626db3fc67ba0a478f39331c4788bca15314a720 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Fri, 28 Jan 2022 20:33:04 +0800
Subject: [PATCH 23/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88111.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E6=9C=80=E5=B0=8F=E6=B7=B1=E5=BA=A6?=
=?UTF-8?q?=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0102.二叉树的层序遍历.md | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/problems/0102.二叉树的层序遍历.md b/problems/0102.二叉树的层序遍历.md
index 9ac23fdf..1a92d42f 100644
--- a/problems/0102.二叉树的层序遍历.md
+++ b/problems/0102.二叉树的层序遍历.md
@@ -2349,7 +2349,29 @@ var minDepth = function(root) {
};
```
+TypeScript:
+
+```typescript
+function minDepth(root: TreeNode | null): number {
+ let helperQueue: TreeNode[] = [];
+ let resMin: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ resMin++;
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (tempNode.left === null && tempNode.right === null) return resMin;
+ if (tempNode.left !== null) helperQueue.push(tempNode.left);
+ if (tempNode.right !== null) helperQueue.push(tempNode.right);
+ }
+ }
+ return resMin;
+};
+```
+
Swift:
+
```swift
func minDepth(_ root: TreeNode?) -> Int {
guard let root = root else {
From 653d645dabd54c9b2d94afc27dc3cb308f82b519 Mon Sep 17 00:00:00 2001
From: Younglesszzz <571688981@qq.com>
Date: Sat, 29 Jan 2022 13:29:28 +0800
Subject: [PATCH 24/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=BA=8C?=
=?UTF-8?q?=E7=BB=B4=E6=95=B0=E7=BB=84=E7=89=88=E6=9C=AC=EF=BC=8C=E7=9B=B8?=
=?UTF-8?q?=E6=AF=94=E4=BA=8E=E4=B8=80=E7=BB=B4=E5=A5=BD=E7=90=86=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../1049.最后一块石头的重量II.md | 37 +++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/problems/1049.最后一块石头的重量II.md b/problems/1049.最后一块石头的重量II.md
index d64e7e56..7b67b1ac 100644
--- a/problems/1049.最后一块石头的重量II.md
+++ b/problems/1049.最后一块石头的重量II.md
@@ -153,6 +153,8 @@ public:
Java:
+
+一维数组版本
```Java
class Solution {
public int lastStoneWeightII(int[] stones) {
@@ -173,6 +175,41 @@ class Solution {
return sum - 2 * dp[target];
}
}
+```
+二维数组版本(便于理解)
+```Java
+class Solution {
+ public int lastStoneWeightII(int[] stones) {
+ int sum = 0;
+ for (int s : stones) {
+ sum += s;
+ }
+
+ int target = sum / 2;
+ //初始化,dp[i][j]为可以放0-i物品,背包容量为j的情况下背包中的最大价值
+ int[][] dp = new int[stones.length][target + 1];
+ //dp[i][0]默认初始化为0
+ //dp[0][j]取决于stones[0]
+ for (int j = stones[0]; j <= target; j++) {
+ dp[0][j] = stones[0];
+ }
+
+ for (int i = 1; i < stones.length; i++) {
+ for (int j = 1; j <= target; j++) {//注意是等于
+ if (j >= stones[i]) {
+ //不放:dp[i - 1][j] 放:dp[i - 1][j - stones[i]] + stones[i]
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - stones[i]] + stones[i]);
+ } else {
+ dp[i][j] = dp[i - 1][j];
+ }
+ }
+ }
+
+ System.out.println(dp[stones.length - 1][target]);
+ return (sum - dp[stones.length - 1][target]) - dp[stones.length - 1][target];
+ }
+}
+
```
Python:
From b1c3d5c4f9db71676ebc44f9c41a10778dfea1c5 Mon Sep 17 00:00:00 2001
From: Younglesszzz <571688981@qq.com>
Date: Sat, 29 Jan 2022 13:39:27 +0800
Subject: [PATCH 25/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=BA=8C?=
=?UTF-8?q?=E7=BB=B4=E6=95=B0=E7=BB=84=E7=89=88=E6=9C=AC=EF=BC=8C=E7=9B=B8?=
=?UTF-8?q?=E6=AF=94=E4=BA=8E=E4=B8=80=E7=BB=B4=E5=A5=BD=E7=90=86=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0416.分割等和子集.md | 39 +++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/problems/0416.分割等和子集.md b/problems/0416.分割等和子集.md
index 45b8b416..9da1f8d5 100644
--- a/problems/0416.分割等和子集.md
+++ b/problems/0416.分割等和子集.md
@@ -210,6 +210,45 @@ class Solution {
}
```
+二维数组版本(易于理解):
+```Java
+class Solution {
+ public boolean canPartition(int[] nums) {
+ int sum = 0;
+ for (int i = 0; i < nums.length; i++) {
+ sum += nums[i];
+ }
+
+ if (sum % 2 == 1)
+ return false;
+ int target = sum / 2;
+
+ //dp[i][j]代表可装物品为0-i,背包容量为j的情况下,背包内容量的最大价值
+ int[][] dp = new int[nums.length][target + 1];
+
+ //初始化,dp[0][j]的最大价值nums[0](if j > weight[i])
+ //dp[i][0]均为0,不用初始化
+ for (int j = nums[0]; j <= target; j++) {
+ dp[0][j] = nums[0];
+ }
+
+ //遍历物品,遍历背包
+ //递推公式:
+ for (int i = 1; i < nums.length; i++) {
+ for (int j = 0; j <= target; j++) {
+ //背包容量可以容纳nums[i]
+ if (j >= nums[i]) {
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - nums[i]] + nums[i]);
+ } else {
+ dp[i][j] = dp[i - 1][j];
+ }
+ }
+ }
+
+ return dp[nums.length - 1][target] == target;
+ }
+}
+```
Python:
```python
class Solution:
From be3f2cfc8a6e0abc3fbbefb3d7d2967b686e96e2 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Sat, 29 Jan 2022 22:12:49 +0800
Subject: [PATCH 26/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880226.=E7=BF=BB?=
=?UTF-8?q?=E8=BD=AC=E4=BA=8C=E5=8F=89=E6=A0=91.md=EF=BC=89=EF=BC=9A?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0226.翻转二叉树.md | 128 +++++++++++++++++++++++++++++++
1 file changed, 128 insertions(+)
diff --git a/problems/0226.翻转二叉树.md b/problems/0226.翻转二叉树.md
index e6dbb709..8108e7ad 100644
--- a/problems/0226.翻转二叉树.md
+++ b/problems/0226.翻转二叉树.md
@@ -563,7 +563,135 @@ var invertTree = function(root) {
};
```
+### TypeScript:
+
+递归法:
+
+```typescript
+// 递归法(前序遍历)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ if (root === null) return root;
+ let tempNode: TreeNode | null = root.left;
+ root.left = root.right;
+ root.right = tempNode;
+ invertTree(root.left);
+ invertTree(root.right);
+ return root;
+};
+
+// 递归法(后序遍历)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ if (root === null) return root;
+ invertTree(root.left);
+ invertTree(root.right);
+ let tempNode: TreeNode | null = root.left;
+ root.left = root.right;
+ root.right = tempNode;
+ return root;
+};
+
+// 递归法(中序遍历)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ if (root === null) return root;
+ invertTree(root.left);
+ let tempNode: TreeNode | null = root.left;
+ root.left = root.right;
+ root.right = tempNode;
+ // 因为左右节点已经进行交换,此时的root.left 是原先的root.right
+ invertTree(root.left);
+ return root;
+};
+```
+
+迭代法:
+
+```typescript
+// 迭代法(栈模拟前序遍历)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ let helperStack: TreeNode[] = [];
+ let curNode: TreeNode,
+ tempNode: TreeNode | null;
+ if (root !== null) helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop()!;
+ // 入栈操作最好在交换节点之前进行,便于理解
+ if (curNode.right) helperStack.push(curNode.right);
+ if (curNode.left) helperStack.push(curNode.left);
+ tempNode = curNode.left;
+ curNode.left = curNode.right;
+ curNode.right = tempNode;
+ }
+ return root;
+};
+
+// 迭代法(栈模拟中序遍历-统一写法形式)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ let helperStack: (TreeNode | null)[] = [];
+ let curNode: TreeNode | null,
+ tempNode: TreeNode | null;
+ if (root !== null) helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop();
+ if (curNode !== null) {
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ helperStack.push(curNode);
+ helperStack.push(null);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ } else {
+ curNode = helperStack.pop()!;
+ tempNode = curNode.left;
+ curNode.left = curNode.right;
+ curNode.right = tempNode;
+ }
+ }
+ return root;
+};
+
+// 迭代法(栈模拟后序遍历-统一写法形式)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ let helperStack: (TreeNode | null)[] = [];
+ let curNode: TreeNode | null,
+ tempNode: TreeNode | null;
+ if (root !== null) helperStack.push(root);
+ while (helperStack.length > 0) {
+ curNode = helperStack.pop();
+ if (curNode !== null) {
+ helperStack.push(curNode);
+ helperStack.push(null);
+ if (curNode.right !== null) helperStack.push(curNode.right);
+ if (curNode.left !== null) helperStack.push(curNode.left);
+ } else {
+ curNode = helperStack.pop()!;
+ tempNode = curNode.left;
+ curNode.left = curNode.right;
+ curNode.right = tempNode;
+ }
+ }
+ return root;
+};
+
+// 迭代法(队列模拟层序遍历)
+function invertTree(root: TreeNode | null): TreeNode | null {
+ const helperQueue: TreeNode[] = [];
+ let curNode: TreeNode,
+ tempNode: TreeNode | null;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ curNode = helperQueue.shift()!;
+ tempNode = curNode.left;
+ curNode.left = curNode.right;
+ curNode.right = tempNode;
+ if (curNode.left !== null) helperQueue.push(curNode.left);
+ if (curNode.right !== null) helperQueue.push(curNode.right);
+ }
+ }
+ return root;
+};
+```
+
### C:
+
递归法
```c
struct TreeNode* invertTree(struct TreeNode* root){
From cee8536fa671b635f74edb1f7d296a5f2efc1bde Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Sun, 30 Jan 2022 13:17:47 +0800
Subject: [PATCH 27/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880101.=E5=AF=B9?=
=?UTF-8?q?=E7=A7=B0=E4=BA=8C=E5=8F=89=E6=A0=91.md=EF=BC=89=EF=BC=9A?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0101.对称二叉树.md | 69 ++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/problems/0101.对称二叉树.md b/problems/0101.对称二叉树.md
index 69bc41d3..e4e232c8 100644
--- a/problems/0101.对称二叉树.md
+++ b/problems/0101.对称二叉树.md
@@ -574,6 +574,75 @@ var isSymmetric = function(root) {
};
```
+## TypeScript:
+
+> 递归法
+
+```typescript
+function isSymmetric(root: TreeNode | null): boolean {
+ function recur(node1: TreeNode | null, node2: TreeNode | null): boolean {
+ if (node1 === null && node2 === null) return true;
+ if (node1 === null || node2 === null) return false;
+ if (node1.val !== node2.val) return false
+ let isSym1: boolean = recur(node1.left, node2.right);
+ let isSym2: boolean = recur(node1.right, node2.left);
+ return isSym1 && isSym2
+ }
+ if (root === null) return true;
+ return recur(root.left, root.right);
+};
+```
+
+> 迭代法
+
+```typescript
+// 迭代法(队列)
+function isSymmetric(root: TreeNode | null): boolean {
+ let helperQueue: (TreeNode | null)[] = [];
+ let tempNode1: TreeNode | null,
+ tempNode2: TreeNode | null;
+ if (root !== null) {
+ helperQueue.push(root.left);
+ helperQueue.push(root.right);
+ }
+ while (helperQueue.length > 0) {
+ tempNode1 = helperQueue.shift()!;
+ tempNode2 = helperQueue.shift()!;
+ if (tempNode1 === null && tempNode2 === null) continue;
+ if (tempNode1 === null || tempNode2 === null) return false;
+ if (tempNode1.val !== tempNode2.val) return false;
+ helperQueue.push(tempNode1.left);
+ helperQueue.push(tempNode2.right);
+ helperQueue.push(tempNode1.right);
+ helperQueue.push(tempNode2.left);
+ }
+ return true;
+}
+
+// 迭代法(栈)
+function isSymmetric(root: TreeNode | null): boolean {
+ let helperStack: (TreeNode | null)[] = [];
+ let tempNode1: TreeNode | null,
+ tempNode2: TreeNode | null;
+ if (root !== null) {
+ helperStack.push(root.left);
+ helperStack.push(root.right);
+ }
+ while (helperStack.length > 0) {
+ tempNode1 = helperStack.pop()!;
+ tempNode2 = helperStack.pop()!;
+ if (tempNode1 === null && tempNode2 === null) continue;
+ if (tempNode1 === null || tempNode2 === null) return false;
+ if (tempNode1.val !== tempNode2.val) return false;
+ helperStack.push(tempNode1.left);
+ helperStack.push(tempNode2.right);
+ helperStack.push(tempNode1.right);
+ helperStack.push(tempNode2.left);
+ }
+ return true;
+};
+```
+
## Swift:
> 递归
From 067f71cdf03858645ba70c5151a1d26f16d91928 Mon Sep 17 00:00:00 2001
From: zhicheng lee <904688436@qq.com>
Date: Mon, 31 Jan 2022 11:54:59 +0800
Subject: [PATCH 28/38] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E8=83=8C=E5=8C=85?=
=?UTF-8?q?=E9=97=AE=E9=A2=98=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=80=E5=AE=8C?=
=?UTF-8?q?=E5=85=A8=E8=83=8C=E5=8C=85.md=20Java=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加注释,去掉一个不必要的if语句
---
problems/背包问题理论基础完全背包.md | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/problems/背包问题理论基础完全背包.md b/problems/背包问题理论基础完全背包.md
index f79310b8..cea69c72 100644
--- a/problems/背包问题理论基础完全背包.md
+++ b/problems/背包问题理论基础完全背包.md
@@ -183,11 +183,9 @@ private static void testCompletePack(){
int[] value = {15, 20, 30};
int bagWeight = 4;
int[] dp = new int[bagWeight + 1];
- for (int i = 0; i < weight.length; i++){
- for (int j = 1; j <= bagWeight; j++){
- if (j - weight[i] >= 0){
- dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
- }
+ for (int i = 0; i < weight.length; i++){ // 遍历物品
+ for (int j = weight[i]; j <= bagWeight; j++){ // 遍历背包容量
+ dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
}
}
for (int maxValue : dp){
@@ -201,8 +199,8 @@ private static void testCompletePackAnotherWay(){
int[] value = {15, 20, 30};
int bagWeight = 4;
int[] dp = new int[bagWeight + 1];
- for (int i = 1; i <= bagWeight; i++){
- for (int j = 0; j < weight.length; j++){
+ for (int i = 1; i <= bagWeight; i++){ // 遍历背包容量
+ for (int j = 0; j < weight.length; j++){ // 遍历物品
if (i - weight[j] >= 0){
dp[i] = Math.max(dp[i], dp[i - weight[j]] + value[j]);
}
From 46571a3b9c619ac39c93becab1c1325fe211b545 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 31 Jan 2022 14:51:28 +0800
Subject: [PATCH 29/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880104.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E6=9C=80=E5=A4=A7=E6=B7=B1=E5=BA=A6?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0104.二叉树的最大深度.md | 48 +++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/problems/0104.二叉树的最大深度.md b/problems/0104.二叉树的最大深度.md
index 7038598b..6875ec74 100644
--- a/problems/0104.二叉树的最大深度.md
+++ b/problems/0104.二叉树的最大深度.md
@@ -598,7 +598,55 @@ var maxDepth = function(root) {
};
```
+## TypeScript:
+
+> 二叉树的最大深度:
+
+```typescript
+// 后续遍历(自下而上)
+function maxDepth(root: TreeNode | null): number {
+ if (root === null) return 0;
+ return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
+};
+
+// 前序遍历(自上而下)
+function maxDepth(root: TreeNode | null): number {
+ function recur(node: TreeNode | null, count: number) {
+ if (node === null) {
+ resMax = resMax > count ? resMax : count;
+ return;
+ }
+ recur(node.left, count + 1);
+ recur(node.right, count + 1);
+ }
+ let resMax: number = 0;
+ let count: number = 0;
+ recur(root, count);
+ return resMax;
+};
+
+// 层序遍历(迭代法)
+function maxDepth(root: TreeNode | null): number {
+ let helperQueue: TreeNode[] = [];
+ let resDepth: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ resDepth++;
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (tempNode.left) helperQueue.push(tempNode.left);
+ if (tempNode.right) helperQueue.push(tempNode.right);
+ }
+ }
+ return resDepth;
+};
+```
+
+
+
## C
+
二叉树最大深度递归
```c
int maxDepth(struct TreeNode* root){
From 463f142f05d5759c8dfaa5f17dbebfa9ddf580f5 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Mon, 31 Jan 2022 16:07:01 +0800
Subject: [PATCH 30/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=88559.n=E5=8F=89?=
=?UTF-8?q?=E6=A0=91=E7=9A=84=E6=9C=80=E5=A4=A7=E6=B7=B1=E5=BA=A6=EF=BC=89?=
=?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0104.二叉树的最大深度.md | 26 +++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/problems/0104.二叉树的最大深度.md b/problems/0104.二叉树的最大深度.md
index 6875ec74..3eecdc92 100644
--- a/problems/0104.二叉树的最大深度.md
+++ b/problems/0104.二叉树的最大深度.md
@@ -643,7 +643,33 @@ function maxDepth(root: TreeNode | null): number {
};
```
+> N叉树的最大深度
+```typescript
+// 后续遍历(自下而上)
+function maxDepth(root: TreeNode | null): number {
+ if (root === null) return 0;
+ return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
+};
+
+// 前序遍历(自上而下)
+function maxDepth(root: TreeNode | null): number {
+ function recur(node: TreeNode | null, count: number) {
+ if (node === null) {
+ resMax = resMax > count ? resMax : count;
+ return;
+ }
+ recur(node.left, count + 1);
+ recur(node.right, count + 1);
+ }
+ let resMax: number = 0;
+ let count: number = 0;
+ recur(root, count);
+ return resMax;
+};
+
+
+```
## C
From e4f674c61e71a7b33ec97e22acc6b7a44e075b6e Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Tue, 1 Feb 2022 20:04:51 +0800
Subject: [PATCH 31/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880111.=E4=BA=8C?=
=?UTF-8?q?=E5=8F=89=E6=A0=91=E7=9A=84=E6=9C=80=E5=B0=8F=E6=B7=B1=E5=BA=A6?=
=?UTF-8?q?.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typescript=E7=89=88?=
=?UTF-8?q?=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0111.二叉树的最小深度.md | 38 +++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/problems/0111.二叉树的最小深度.md b/problems/0111.二叉树的最小深度.md
index a439322a..224caa5e 100644
--- a/problems/0111.二叉树的最小深度.md
+++ b/problems/0111.二叉树的最小深度.md
@@ -404,6 +404,44 @@ var minDepth = function(root) {
};
```
+## TypeScript
+
+> 递归法
+
+```typescript
+function minDepth(root: TreeNode | null): number {
+ if (root === null) return 0;
+ if (root.left !== null && root.right === null) {
+ return 1 + minDepth(root.left);
+ }
+ if (root.left === null && root.right !== null) {
+ return 1 + minDepth(root.right);
+ }
+ return 1 + Math.min(minDepth(root.left), minDepth(root.right));
+}
+```
+
+> 迭代法
+
+```typescript
+function minDepth(root: TreeNode | null): number {
+ let helperQueue: TreeNode[] = [];
+ let resMin: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ resMin++;
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ if (tempNode.left === null && tempNode.right === null) return resMin;
+ if (tempNode.left !== null) helperQueue.push(tempNode.left);
+ if (tempNode.right !== null) helperQueue.push(tempNode.right);
+ }
+ }
+ return resMin;
+};
+```
+
## Swift
> 递归
From 8ac7cdce22a6f350ec57627e474bd482f5d041b3 Mon Sep 17 00:00:00 2001
From: hutbzc <3260189532@qq.com>
Date: Tue, 1 Feb 2022 23:01:36 +0800
Subject: [PATCH 32/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880045.=E8=B7=B3?=
=?UTF-8?q?=E8=B7=83=E6=B8=B8=E6=88=8FII.md=EF=BC=89=EF=BC=9A=E8=A1=A5?=
=?UTF-8?q?=E5=85=85Java=E7=89=88=E6=9C=AC2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0045.跳跃游戏II.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/problems/0045.跳跃游戏II.md b/problems/0045.跳跃游戏II.md
index a39c064a..7a3f048c 100644
--- a/problems/0045.跳跃游戏II.md
+++ b/problems/0045.跳跃游戏II.md
@@ -142,6 +142,7 @@ public:
### Java
```Java
+// 版本一
class Solution {
public int jump(int[] nums) {
if (nums == null || nums.length == 0 || nums.length == 1) {
@@ -172,7 +173,30 @@ class Solution {
}
```
+```java
+// 版本二
+class Solution {
+ public int jump(int[] nums) {
+ int result = 0;
+ // 当前覆盖的最远距离下标
+ int end = 0;
+ // 下一步覆盖的最远距离下标
+ int temp = 0;
+ for (int i = 0; i <= end && end < nums.length - 1; ++i) {
+ temp = Math.max(temp, i + nums[i]);
+ // 可达位置的改变次数就是跳跃次数
+ if (i == end) {
+ end = temp;
+ result++;
+ }
+ }
+ return result;
+ }
+}
+```
+
### Python
+
```python
class Solution:
def jump(self, nums: List[int]) -> int:
From 40c06155f9e65e3525100ac6aff6f3ce6aeb8dac Mon Sep 17 00:00:00 2001
From: hutbzc <3260189532@qq.com>
Date: Tue, 1 Feb 2022 23:04:07 +0800
Subject: [PATCH 33/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880139.=E5=8D=95?=
=?UTF-8?q?=E8=AF=8D=E6=8B=86=E5=88=86.md=EF=BC=89=EF=BC=9A=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0Java=E5=9B=9E=E5=9B=9E=E6=BA=AF+=E8=AE=B0=E5=BF=86?=
=?UTF-8?q?=E5=8C=96=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0139.单词拆分.md | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/problems/0139.单词拆分.md b/problems/0139.单词拆分.md
index e24ffc1a..1653a81a 100644
--- a/problems/0139.单词拆分.md
+++ b/problems/0139.单词拆分.md
@@ -248,6 +248,36 @@ class Solution {
return valid[s.length()];
}
}
+
+// 回溯法+记忆化
+class Solution {
+ public boolean wordBreak(String s, List wordDict) {
+ Set wordDictSet = new HashSet(wordDict);
+ int[] memory = new int[s.length()];
+ return backTrack(s, wordDictSet, 0, memory);
+ }
+
+ public boolean backTrack(String s, Set wordDictSet, int startIndex, int[] memory) {
+ // 结束条件
+ if (startIndex >= s.length()) {
+ return true;
+ }
+ if (memory[startIndex] != 0) {
+ // 此处认为:memory[i] = 1 表示可以拼出i 及以后的字符子串, memory[i] = -1 表示不能
+ return memory[startIndex] == 1 ? true : false;
+ }
+ for (int i = startIndex; i < s.length(); ++i) {
+ // 处理 递归 回溯 循环不变量:[startIndex, i + 1)
+ String word = s.substring(startIndex, i + 1);
+ if (wordDictSet.contains(word) && backTrack(s, wordDictSet, i + 1, memory)) {
+ memory[startIndex] = 1;
+ return true;
+ }
+ }
+ memory[startIndex] = -1;
+ return false;
+ }
+}
```
Python:
From 5a2ff02b94d417a7a51d44998e212913afeba48b Mon Sep 17 00:00:00 2001
From: hutbzc <3260189532@qq.com>
Date: Tue, 1 Feb 2022 23:08:56 +0800
Subject: [PATCH 34/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=880376.=E6=91=86?=
=?UTF-8?q?=E5=8A=A8=E5=BA=8F=E5=88=97.md=EF=BC=89=EF=BC=9A=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E4=BA=86=E9=80=BB=E8=BE=91=E5=B0=8F=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0376.摆动序列.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/problems/0376.摆动序列.md b/problems/0376.摆动序列.md
index 2bc23182..d75311eb 100644
--- a/problems/0376.摆动序列.md
+++ b/problems/0376.摆动序列.md
@@ -174,7 +174,7 @@ public:
```Java
class Solution {
public int wiggleMaxLength(int[] nums) {
- if (nums == null || nums.length <= 1) {
+ if (nums.length <= 1) {
return nums.length;
}
//当前差值
From 2f1c56e6dd34a5a8ae89a8401219a0ce2dd623f3 Mon Sep 17 00:00:00 2001
From: Xiaofei-fei
Date: Wed, 2 Feb 2022 18:47:01 +0800
Subject: [PATCH 35/38] =?UTF-8?q?494=E9=A2=98python=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.DS_Store | Bin 0 -> 8196 bytes
problems/0494.目标和.md | 3 ++-
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 .DS_Store
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..7794435bd6714aed6095604325ab6ffe84221748
GIT binary patch
literal 8196
zcmeHMU2GIp6u#fIv@>*|1GG|b$8K6szzU`1r~D<`KM+bOc3ZkFVA<^sbYMDDcV^o{
zC8_Z*g7~0DeNjN;ix1VP7!wtvi3asattOIaj7FnRKFACD;<m0CQ8r?%*`*
zup!Jqn1L_@VFtnsgc#mK>qC@oE@Ocl6VhKgsPK;f
zB>54*zv!9H0lrT(kg-6H3F*61pW^g@z!kv}1Hzs3QEpB$7RWIng*$_AX9z|{a6*AU
zI{8I?bB36ZVHsv1%)s;vaQet>kY$*|QrDl~QTewYB!ubsmP_3Yqqra9{olWg+mlT+n{GUw!6>BxFmbE
zVwVEl+2`1MGX~dp^*L5{z;=7J1${}YFKZ<|qu#RO<_Uw^irv19V_AD0*W}%FCp=@s
z+c#eT{C4F9d>fSP!^y{nJ6w>vh?lONbu4&8|RHg%m
zmHORkhfBfBT2dIUR;$&HV*~|7b45$7x?bVg$!AiU;v1PT@4p;3+(h7x5C#;XGc$n|KQs@D4u2
zC47d@@il(J&-ewu;tyQKU-(*}`EPl8aOHV4$};qPPqUrg~a?_**LUMB<#)$$zerqZ#K$YPAhoU&S>
zu&z*-$r>?ej;P+Hu9USFMJo{1s>o{MrL0MQRb3mYRkWn6<%w!lWTPT$5S7j9R?b5$
zUsQE9rYIWoE0M-XGv|^f6Uxsu`LjI>%9Uv=l#lj1Ssi`Gb+E&<$vniKWM>KOAFzw;
zOLm$4$bMs22=4`ibPeTLfog0(4BN2-yU>DG>_Zp2(L-oAaM(xuF?h&gm{5NL591L$
zhR5*)p2jnH7SG`$w)*YO6S|2@2qi-i7<@G-u?1it6^4^W#!bE~N5N?f6*
zX=ombXKc%{kB~0smvguYWuAEFGJgJVp8fa#n=rEQmBS2#8ThXmKz>uase!C#ThsVi
zJ4*K
literal 0
HcmV?d00001
diff --git a/problems/0494.目标和.md b/problems/0494.目标和.md
index 0faef4a5..f190b734 100644
--- a/problems/0494.目标和.md
+++ b/problems/0494.目标和.md
@@ -272,7 +272,8 @@ Python:
class Solution:
def findTargetSumWays(self, nums: List[int], target: int) -> int:
sumValue = sum(nums)
- if target > sumValue or (sumValue + target) % 2 == 1: return 0
+ #注意边界条件为 target>sumValue or target<-sumValue or (sumValue + target) % 2 == 1
+ if abs(target) > sumValue or (sumValue + target) % 2 == 1: return 0
bagSize = (sumValue + target) // 2
dp = [0] * (bagSize + 1)
dp[0] = 1
From 38c8b6849f32b47d59fc9ed5d1b394dda745b277 Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Thu, 3 Feb 2022 20:03:43 +0800
Subject: [PATCH 36/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880222.=E5=AE=8C?=
=?UTF-8?q?=E5=85=A8=E4=BA=8C=E5=8F=89=E6=A0=91=E7=9A=84=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E4=B8=AA=E6=95=B0.md=EF=BC=89=EF=BC=9A=E5=A2=9E=E5=8A=A0typesc?=
=?UTF-8?q?ript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../0222.完全二叉树的节点个数.md | 60 ++++++++++++++++++-
1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/problems/0222.完全二叉树的节点个数.md b/problems/0222.完全二叉树的节点个数.md
index 8d38bace..ffbc32ff 100644
--- a/problems/0222.完全二叉树的节点个数.md
+++ b/problems/0222.完全二叉树的节点个数.md
@@ -447,7 +447,63 @@ var countNodes = function(root) {
};
```
+## TypeScrpt:
+
+> 递归法
+
+```typescript
+function countNodes(root: TreeNode | null): number {
+ if (root === null) return 0;
+ return 1 + countNodes(root.left) + countNodes(root.right);
+};
+```
+
+> 迭代法
+
+```typescript
+function countNodes(root: TreeNode | null): number {
+ let helperQueue: TreeNode[] = [];
+ let resCount: number = 0;
+ let tempNode: TreeNode;
+ if (root !== null) helperQueue.push(root);
+ while (helperQueue.length > 0) {
+ for (let i = 0, length = helperQueue.length; i < length; i++) {
+ tempNode = helperQueue.shift()!;
+ resCount++;
+ if (tempNode.left) helperQueue.push(tempNode.left);
+ if (tempNode.right) helperQueue.push(tempNode.right);
+ }
+ }
+ return resCount;
+};
+```
+
+> 利用完全二叉树性质
+
+```typescript
+function countNodes(root: TreeNode | null): number {
+ if (root === null) return 0;
+ let left: number = 0,
+ right: number = 0;
+ let curNode: TreeNode | null= root;
+ while (curNode !== null) {
+ left++;
+ curNode = curNode.left;
+ }
+ curNode = root;
+ while (curNode !== null) {
+ right++;
+ curNode = curNode.right;
+ }
+ if (left === right) {
+ return 2 ** left - 1;
+ }
+ return 1 + countNodes(root.left) + countNodes(root.right);
+};
+```
+
## C:
+
递归法
```c
int countNodes(struct TreeNode* root) {
@@ -538,7 +594,7 @@ func _countNodes(_ root: TreeNode?) -> Int {
return 1 + leftCount + rightCount
}
```
-
+
> 层序遍历
```Swift
func countNodes(_ root: TreeNode?) -> Int {
@@ -564,7 +620,7 @@ func countNodes(_ root: TreeNode?) -> Int {
return res
}
```
-
+
> 利用完全二叉树性质
```Swift
func countNodes(_ root: TreeNode?) -> Int {
From ea5a011d783073dc0f98bd5d0a0130c97a02153c Mon Sep 17 00:00:00 2001
From: Steve2020 <841532108@qq.com>
Date: Sat, 5 Feb 2022 13:04:38 +0800
Subject: [PATCH 37/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880110.=E5=B9=B3?=
=?UTF-8?q?=E8=A1=A1=E4=BA=8C=E5=8F=89=E6=A0=91.md=EF=BC=89=EF=BC=9A?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0typescript=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
problems/0110.平衡二叉树.md | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/problems/0110.平衡二叉树.md b/problems/0110.平衡二叉树.md
index 9d43407a..8a701bb3 100644
--- a/problems/0110.平衡二叉树.md
+++ b/problems/0110.平衡二叉树.md
@@ -627,7 +627,26 @@ var isBalanced = function(root) {
};
```
+## TypeScript
+
+```typescript
+// 递归法
+function isBalanced(root: TreeNode | null): boolean {
+ function getDepth(root: TreeNode | null): number {
+ if (root === null) return 0;
+ let leftDepth: number = getDepth(root.left);
+ if (leftDepth === -1) return -1;
+ let rightDepth: number = getDepth(root.right);
+ if (rightDepth === -1) return -1;
+ if (Math.abs(leftDepth - rightDepth) > 1) return -1;
+ return 1 + Math.max(leftDepth, rightDepth);
+ }
+ return getDepth(root) !== -1;
+};
+```
+
## C
+
递归法:
```c
int getDepth(struct TreeNode* node) {
From 81c1060ad7b21cab48d3f27aea802135544a73ff Mon Sep 17 00:00:00 2001
From: youngyangyang04 <826123027@qq.com>
Date: Wed, 9 Feb 2022 14:57:04 +0800
Subject: [PATCH 38/38] Update
---
README.md | 9 +++++----
problems/前序/程序员写文档工具.md | 1 -
problems/背包理论基础01背包-2.md | 8 ++++----
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index c5149776..c1761f7b 100644
--- a/README.md
+++ b/README.md
@@ -5,10 +5,11 @@
> 1. **介绍**:本项目是一套完整的刷题计划,旨在帮助大家少走弯路,循序渐进学算法,[关注作者](#关于作者)
> 2. **PDF版本** : [「代码随想录」算法精讲 PDF 版本](https://programmercarl.com/other/algo_pdf.html) 。
-> 3. **刷题顺序** : README已经将刷题顺序排好了,按照顺序一道一道刷就可以。
-> 4. **学习社区** : 一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入[「代码随想录」知识星球](https://programmercarl.com/other/kstar.html) 。
-> 5. **提交代码**:本项目统一使用C++语言进行讲解,但已经有Java、Python、Go、JavaScript等等多语言版本,感谢[这里的每一位贡献者](https://github.com/youngyangyang04/leetcode-master/graphs/contributors),如果你也想贡献代码点亮你的头像,[点击这里](https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A)了解提交代码的方式。
-> 6. **转载须知** :以下所有文章皆为我([程序员Carl](https://github.com/youngyangyang04))的原创。引用本项目文章请注明出处,发现恶意抄袭或搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
+> 3. **最强八股文:**:[代码随想录知识星球精华PDF](https://www.programmercarl.com/other/kstar_baguwen.html)
+> 4. **刷题顺序** : README已经将刷题顺序排好了,按照顺序一道一道刷就可以。
+> 5. **学习社区** : 一起学习打卡/面试技巧/如何选择offer/大厂内推/职场规则/简历修改/技术分享/程序人生。欢迎加入[「代码随想录」知识星球](https://programmercarl.com/other/kstar.html) 。
+> 6. **提交代码**:本项目统一使用C++语言进行讲解,但已经有Java、Python、Go、JavaScript等等多语言版本,感谢[这里的每一位贡献者](https://github.com/youngyangyang04/leetcode-master/graphs/contributors),如果你也想贡献代码点亮你的头像,[点击这里](https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A)了解提交代码的方式。
+> 7. **转载须知** :以下所有文章皆为我([程序员Carl](https://github.com/youngyangyang04))的原创。引用本项目文章请注明出处,发现恶意抄袭或搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
diff --git a/problems/前序/程序员写文档工具.md b/problems/前序/程序员写文档工具.md
index b76fb036..e4193c42 100644
--- a/problems/前序/程序员写文档工具.md
+++ b/problems/前序/程序员写文档工具.md
@@ -135,7 +135,6 @@ Markdown支持部分html,例如这样
-
-----------------------
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
* B站视频:[代码随想录](https://space.bilibili.com/525438321)
diff --git a/problems/背包理论基础01背包-2.md b/problems/背包理论基础01背包-2.md
index a57bae10..dabdfb2d 100644
--- a/problems/背包理论基础01背包-2.md
+++ b/problems/背包理论基础01背包-2.md
@@ -210,7 +210,7 @@ int main() {
## 其他语言版本
-Java:
+### Java
```java
public static void main(String[] args) {
@@ -240,7 +240,7 @@ Java:
-Python:
+### Python
```python
def test_1_wei_bag_problem():
weight = [1, 3, 4]
@@ -260,7 +260,7 @@ def test_1_wei_bag_problem():
test_1_wei_bag_problem()
```
-Go:
+### Go
```go
func test_1_wei_bag_problem(weight, value []int, bagWeight int) int {
// 定义 and 初始化
@@ -292,7 +292,7 @@ func main() {
}
```
-javaScript:
+### javaScript
```js