Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
3d6baa3
增加 java 一维dp数组解法代码
dcj00 May 19, 2022
9ccacf5
Merge branch 'youngyangyang04:master' into master
dcj00 Jun 3, 2022
cfa0504
Update 0056.合并区间.md
silaslll Jun 6, 2022
091204c
添加(0129.求根节点到叶节点数字之和.md):增加go版本
Hanmengnan Jun 7, 2022
97fc88e
添加 0046.全排列.md Scala版本
wzqwtt Jun 7, 2022
8537401
添加 0047.全排列II.md Scala版本
wzqwtt Jun 7, 2022
d3e9706
Merge branch 'youngyangyang04:master' into master
dcj00 Jun 7, 2022
fa26fb3
增加 java dp解法
dcj00 Jun 7, 2022
7b95f17
添加(0001.两数之和.md):Dart版本
freestyletime Jun 7, 2022
371564b
添加 0051.N皇后.md Scala版本
wzqwtt Jun 7, 2022
ea27b3c
Merge branch 'youngyangyang04:master' into master
freestyletime Jun 12, 2022
d8ae676
Merge branch 'youngyangyang04:master' into master
freestyletime Jun 14, 2022
ffe981f
0977. 有序数组的平方
AronJudge Jun 26, 2022
55086c2
Update 0226.翻转二叉树.md JavaScript递归版本
w2xi Jul 2, 2022
11b701f
0018 Java代码部分增加剪枝操作,不然Leetcode不能通过
AronJudge Jul 3, 2022
7064434
Merge branch 'youngyangyang04:master' into master
AronJudge Jul 3, 2022
305955e
Merge branch 'youngyangyang04:master' into master
freestyletime Jul 5, 2022
28c452d
Merge branch 'youngyangyang04:master' into master
w2xi Jul 6, 2022
0ee18c3
Update 0450.删除二叉搜索树中的节点.md JavaScript递归版本
w2xi Jul 6, 2022
50d7e35
Merge branch 'youngyangyang04:master' into master
AronJudge Jul 11, 2022
85e0d6c
更新0347 前K个高频元素
AronJudge Jul 11, 2022
d8253df
Merge branch 'youngyangyang04:master' into master
AronJudge Jul 12, 2022
ba081f8
更新 0104. 二叉树最大深度
AronJudge Jul 12, 2022
579f905
Merge pull request #1514 from AronJudge/master
youngyangyang04 Jul 13, 2022
7d2ad4b
Merge pull request #1446 from silaslll/patch-3
youngyangyang04 Jul 13, 2022
f9d3ae7
Merge pull request #1447 from Hanmengnan/master
youngyangyang04 Jul 13, 2022
0b2e309
Merge pull request #1448 from wzqwtt/backtracking06
youngyangyang04 Jul 13, 2022
935d82b
Merge pull request #1449 from dcj00/master
youngyangyang04 Jul 13, 2022
28857f2
Merge pull request #1450 from freestyletime/master
youngyangyang04 Jul 13, 2022
e3a0207
Merge pull request #1451 from wzqwtt/backtracking07
youngyangyang04 Jul 13, 2022
b8c3d45
Merge pull request #1505 from w2xi/master
youngyangyang04 Jul 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions problems/0001.两数之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,20 @@ public class Solution {
}
```

Dart:
```dart
List<int> twoSum(List<int> nums, int target) {
var tmp = [];
for (var i = 0; i < nums.length; i++) {
var rest = target - nums[i];
if(tmp.contains(rest)){
return [tmp.indexOf(rest), i];
}
tmp.add(nums[i]);
}
return [0 , 0];
}
```

-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
5 changes: 5 additions & 0 deletions problems/0018.四数之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ class Solution {

for (int i = 0; i < nums.length; i++) {

// nums[i] > target 直接返回, 剪枝操作
if (nums[i] > 0 && nums[i] > target) {
return result;
}

if (i > 0 && nums[i - 1] == nums[i]) {
continue;
}
Expand Down
30 changes: 30 additions & 0 deletions problems/0046.全排列.md
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,36 @@ func permute(_ nums: [Int]) -> [[Int]] {
}
```

### Scala

```scala
object Solution {
import scala.collection.mutable
def permute(nums: Array[Int]): List[List[Int]] = {
var result = mutable.ListBuffer[List[Int]]()
var path = mutable.ListBuffer[Int]()

def backtracking(used: Array[Boolean]): Unit = {
if (path.size == nums.size) {
// 如果path的长度和nums相等,那么可以添加到结果集
result.append(path.toList)
return
}
// 添加循环守卫,只有当当前数字没有用过的情况下才进入回溯
for (i <- nums.indices if used(i) == false) {
used(i) = true
path.append(nums(i))
backtracking(used) // 回溯
path.remove(path.size - 1)
used(i) = false
}
}

backtracking(new Array[Boolean](nums.size)) // 调用方法
result.toList // 最终返回结果集的List形式
}
}
```

-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
38 changes: 38 additions & 0 deletions problems/0047.全排列II.md
Original file line number Diff line number Diff line change
Expand Up @@ -422,5 +422,43 @@ int** permuteUnique(int* nums, int numsSize, int* returnSize, int** returnColumn
}
```

### Scala

```scala
object Solution {
import scala.collection.mutable
def permuteUnique(nums: Array[Int]): List[List[Int]] = {
var result = mutable.ListBuffer[List[Int]]()
var path = mutable.ListBuffer[Int]()
var num = nums.sorted // 首先对数据进行排序

def backtracking(used: Array[Boolean]): Unit = {
if (path.size == num.size) {
// 如果path的size等于num了,那么可以添加到结果集
result.append(path.toList)
return
}
// 循环守卫,当前元素没被使用过就进入循环体
for (i <- num.indices if used(i) == false) {
// 当前索引为0,不存在和前一个数字相等可以进入回溯
// 当前索引值和上一个索引不相等,可以回溯
// 前一个索引对应的值没有被选,可以回溯
// 因为Scala没有continue,只能将逻辑反过来写
if (i == 0 || (i > 0 && num(i) != num(i - 1)) || used(i-1) == false) {
used(i) = true
path.append(num(i))
backtracking(used)
path.remove(path.size - 1)
used(i) = false
}
}
}

backtracking(new Array[Boolean](nums.length))
result.toList
}
}
```

-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
74 changes: 73 additions & 1 deletion problems/0051.N皇后.md
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ var solveNQueens = function(n) {
};
```

## TypeScript
### TypeScript

```typescript
function solveNQueens(n: number): string[][] {
Expand Down Expand Up @@ -683,5 +683,77 @@ char *** solveNQueens(int n, int* returnSize, int** returnColumnSizes){
}
```

### Scala

```scala
object Solution {
import scala.collection.mutable
def solveNQueens(n: Int): List[List[String]] = {
var result = mutable.ListBuffer[List[String]]()

def judge(x: Int, y: Int, maze: Array[Array[Boolean]]): Boolean = {
// 正上方
var xx = x
while (xx >= 0) {
if (maze(xx)(y)) return false
xx -= 1
}
// 左边
var yy = y
while (yy >= 0) {
if (maze(x)(yy)) return false
yy -= 1
}
// 左上方
xx = x
yy = y
while (xx >= 0 && yy >= 0) {
if (maze(xx)(yy)) return false
xx -= 1
yy -= 1
}
xx = x
yy = y
// 右上方
while (xx >= 0 && yy < n) {
if (maze(xx)(yy)) return false
xx -= 1
yy += 1
}
true
}

def backtracking(row: Int, maze: Array[Array[Boolean]]): Unit = {
if (row == n) {
// 将结果转换为题目所需要的形式
var path = mutable.ListBuffer[String]()
for (x <- maze) {
var tmp = mutable.ListBuffer[String]()
for (y <- x) {
if (y == true) tmp.append("Q")
else tmp.append(".")
}
path.append(tmp.mkString)
}
result.append(path.toList)
return
}

for (j <- 0 until n) {
// 判断这个位置是否可以放置皇后
if (judge(row, j, maze)) {
maze(row)(j) = true
backtracking(row + 1, maze)
maze(row)(j) = false
}
}
}

backtracking(0, Array.ofDim[Boolean](n, n))
result.toList
}
}
```

-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
26 changes: 20 additions & 6 deletions problems/0056.合并区间.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,24 +136,38 @@ public:

### Java
```java

/**
时间复杂度 : O(NlogN) 排序需要O(NlogN)
空间复杂度 : O(logN) java 的内置排序是快速排序 需要 O(logN)空间

*/
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new LinkedList<>();
Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));

//按照左边界排序
Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));
//initial start 是最小左边界
int start = intervals[0][0];
int rightmostRightBound = intervals[0][1];
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] > intervals[i - 1][1]) {
res.add(new int[]{start, intervals[i - 1][1]});
//如果左边界大于最大右边界
if (intervals[i][0] > rightmostRightBound) {
//加入区间 并且更新start
res.add(new int[]{start, rightmostRightBound});
start = intervals[i][0];
rightmostRightBound = intervals[i][1];
} else {
intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);
//更新最大右边界
rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1]);
}
}
res.add(new int[]{start, intervals[intervals.length - 1][1]});
res.add(new int[]{start, rightmostRightBound});
return res.toArray(new int[res.size()][]);
}
}

}
```
```java
// 版本2
Expand Down
25 changes: 12 additions & 13 deletions problems/0104.二叉树的最大深度.md
Original file line number Diff line number Diff line change
Expand Up @@ -294,14 +294,13 @@ class solution {
/**
* 递归法
*/
public int maxdepth(treenode root) {
public int maxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftdepth = maxdepth(root.left);
int rightdepth = maxdepth(root.right);
return math.max(leftdepth, rightdepth) + 1;

int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
}
}
```
Expand All @@ -311,23 +310,23 @@ class solution {
/**
* 迭代法,使用层序遍历
*/
public int maxdepth(treenode root) {
public int maxDepth(TreeNode root) {
if(root == null) {
return 0;
}
deque<treenode> deque = new linkedlist<>();
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
int depth = 0;
while (!deque.isempty()) {
while (!deque.isEmpty()) {
int size = deque.size();
depth++;
for (int i = 0; i < size; i++) {
treenode poll = deque.poll();
if (poll.left != null) {
deque.offer(poll.left);
TreeNode node = deque.poll();
if (node.left != null) {
deque.offer(node.left);
}
if (poll.right != null) {
deque.offer(poll.right);
if (node.right != null) {
deque.offer(node.right);
}
}
}
Expand Down
26 changes: 26 additions & 0 deletions problems/0129.求根到叶子节点数字之和.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
<img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210924105952.png" width="1000"/>
</a>
<p align="center"><strong><a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>



# 129. 求根节点到叶节点数字之和

[力扣题目链接](https://leetcode.cn/problems/sum-root-to-leaf-numbers/)
Expand Down Expand Up @@ -245,6 +248,29 @@ class Solution:
```
Go:

```go
func sumNumbers(root *TreeNode) int {
sum = 0
travel(root, root.Val)
return sum
}

func travel(root *TreeNode, tmpSum int) {
if root.Left == nil && root.Right == nil {
sum += tmpSum
} else {
if root.Left != nil {
travel(root.Left, tmpSum*10+root.Left.Val)
}
if root.Right != nil {
travel(root.Right, tmpSum*10+root.Right.Val)
}
}
}
```



JavaScript:
```javascript
var sumNumbers = function(root) {
Expand Down
Loading