Merge pull request #2173 from lifejwang11/master

修改java版本解法的位置,适合图的解法放在第一个,第二个解法(难理解版本)放在其后,新增java版本的迭代法
This commit is contained in:
程序员Carl
2023-07-25 10:01:48 +08:00
committed by GitHub
2 changed files with 95 additions and 18 deletions

View File

@ -343,8 +343,32 @@ public:
## 其他语言版本 ## 其他语言版本
### Java
### Java
未剪枝优化
```java
class Solution {
List<List<Integer>> result= new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
backtracking(n,k,1);
return result;
}
public void backtracking(int n,int k,int startIndex){
if (path.size() == k){
result.add(new ArrayList<>(path));
return;
}
for (int i =startIndex;i<=n;i++){
path.add(i);
backtracking(n,k,i+1);
path.removeLast();
}
}
}
```
剪枝优化:
```java ```java
class Solution { class Solution {
List<List<Integer>> result = new ArrayList<>(); List<List<Integer>> result = new ArrayList<>();

View File

@ -268,6 +268,34 @@ public:
### Java ### Java
```java
// 解法1(最好理解的版本)
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) return root;
if (root.val == key) {
if (root.left == null) {
return root.right;
} else if (root.right == null) {
return root.left;
} else {
TreeNode cur = root.right;
while (cur.left != null) {
cur = cur.left;
}
cur.left = root.left;
root = root.right;
return root;
}
}
if (root.val > key) root.left = deleteNode(root.left, key);
if (root.val < key) root.right = deleteNode(root.right, key);
return root;
}
}
```
```java ```java
class Solution { class Solution {
public TreeNode deleteNode(TreeNode root, int key) { public TreeNode deleteNode(TreeNode root, int key) {
@ -296,34 +324,59 @@ class Solution {
} }
} }
``` ```
递归法
```java ```java
// 解法2
class Solution { class Solution {
public TreeNode deleteNode(TreeNode root, int key) { public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) return root; if (root == null){
if (root.val == key) { return null;
if (root.left == null) { }
return root.right; //寻找对应的对应的前面的节点,以及他的前一个节点
} else if (root.right == null) { TreeNode cur = root;
return root.left; TreeNode pre = null;
} else { while (cur != null){
TreeNode cur = root.right; if (cur.val < key){
while (cur.left != null) { pre = cur;
cur = cur.left; cur = cur.right;
} } else if (cur.val > key) {
cur.left = root.left; pre = cur;
root = root.right; cur = cur.left;
return root; }else {
break;
} }
} }
if (root.val > key) root.left = deleteNode(root.left, key); if (pre == null){
if (root.val < key) root.right = deleteNode(root.right, key); return deleteOneNode(cur);
}
if (pre.left !=null && pre.left.val == key){
pre.left = deleteOneNode(cur);
}
if (pre.right !=null && pre.right.val == key){
pre.right = deleteOneNode(cur);
}
return root; return root;
} }
public TreeNode deleteOneNode(TreeNode node){
if (node == null){
return null;
}
if (node.right == null){
return node.left;
}
TreeNode cur = node.right;
while (cur.left !=null){
cur = cur.left;
}
cur.left = node.left;
return node.right;
}
} }
``` ```
### Python ### Python
递归法(版本一) 递归法(版本一)
```python ```python
class Solution: class Solution: