这个回溯问题是怎么回事?

问题描述 投票:0回答:1
class Solution {
    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
    
         List<Integer> list = new ArrayList<>();
         helper(k, n, list, 1);
         return res;
    }
    private void helper(int k, int n, List<Integer> list, int index){
        if(list.size() == k){
            res.add(new ArrayList<>(list));
            return;
        }
        for(int i=index; i<=n; i++){
            list.add(i);
            helper(k, n, list, index+1);
            list.remove(list.size()-1);
        }
        return;
    }
}

当我这样做时,输出如下:[[1,2],[1,3],[1,4],[2,2],[2,3],[2,4],[ 3,2]、[3,3]、[3,4]、[4,2]、[4,3]、[4,4]]。预期输出为:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]。

但是当我将这一行

helper(k, n, list, index+1);
更改为
helper(k, n, list, i+1);
时,输出变得正确。

我想知道两者之间的区别,但到目前为止我还没有得到答案(难道索引+1和i+1每次都应该是相同的值吗?)。

java backtracking
1个回答
0
投票

但是当我将这一行

helper(k, n, list, index+1);
更改为
helper(k, n, list, i+1);
时,输出变得正确。

正如所料。

我想知道两者之间的区别,但到目前为止我还没有得到答案(难道索引+1和i+1每次都应该是相同的值吗?)。

不同的是,循环中改变了

i
,而不是
index

for(int i = index; i <= n; i++) {

意思(英语):

“从将

i
设置为
index
的值开始,在每次迭代中将
i
加 1,并在
i
小于或等于
n
时继续前进”。

没有任何改变

index
。 事实上
index
i
仅在第一次迭代时才会具有相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.