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每次都应该是相同的值吗?)。
但是当我将这一行
更改为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
加 1,并在i
小于或等于i
时继续前进”。n
没有任何改变
index
。 事实上 index
和 i
仅在第一次迭代时才会具有相同的值。