力扣回溯 77题目组合-->代码逻辑问题
问题描述:
力扣回溯问题 77:组合:怎么把循环改成 我自己一步一步的代码逻辑?这里的减枝怎么实现?
相关截图:
相关代码:
package tracebacking;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/**
* 77. 组合
* 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
*
* 示例:
*
* 输入: n = 4, k = 2
* 输出:
* [
* [2,4],
* [3,4],
* [2,3],
* [1,2],
* [1,3],
* [1,4],
* ]
*/
class Solution77 {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
//验证参数的合法性
if( k<=0 || k > n){
return res;
}
Deque<Integer> path = new ArrayDeque<>();
backtracking(n,k,1,path,res);
return res;
}
private void backtracking(int n, int k,int startIndex, Deque<Integer> path, List<List<Integer>> res) {
// System.out.println(res);
//终止条件
if(path.size() == k){
res.add(new ArrayList<>(path));
return;
}
//依次搜索不同下标的元素--所以我们要添加一个索引
path.add(1);
backtracking(n,k,2,path,res);
path.removeLast();
path.add(2);
backtracking(n,k,3,path,res);
path.removeLast();
path.add(3);
backtracking(n,k,4,path,res);
path.removeLast();
path.add(4);
backtracking(n,k,5,path,res);
path.removeLast();
// for (int i = startIndex; i <= n ; i++) {
// path.add(i);
// backtracking(n,k,i+1,path,res);
// path.removeLast();
// }
}
public static void main(String[] args) {
Solution77 solution77 = new Solution77();
List<List<Integer>> combine = solution77.combine(4, 2);
System.out.println(combine);
}
}
25
收起
正在回答
1回答
我没有特别理解你的问题。我测试了一下,你的这段代码是可以 ac 77 号问题的?
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
if( k<=0 || k > n){
return res;
}
Deque<Integer> path = new ArrayDeque<>();
backtracking(n,k,1,path,res);
return res;
}
private void backtracking(int n, int k,int startIndex, Deque<Integer> path, List<List<Integer>> res) {
if(path.size() == k){
res.add(new ArrayList<>(path));
return;
}
for (int i = startIndex; i <= n ; i++) {
path.add(i);
backtracking(n,k,i+1,path,res);
path.removeLast();
}
}
}
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星