class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
if (n == 0) {
return res;
}
List<Integer> cur = new ArrayList<>();
helper(res, cur, n, k, 1);
return res;
}
private void helper (List<List<Integer>> res, List<Integer> cur, int n, int k, int start) {
if (k == 0) {
res.add(new ArrayList<>(cur));
return;
}
for (int i = start; i <= n; i++) {
cur.add(i);
helper(res, cur, n, k - 1, i + 1); // helper(res, cur, n, --k, i + 1)
cur.remove(cur.size() - 1);
}
}
}
Java。在最后一行5中,当我将“ k-1”更改为“ --k”时,结果将有所不同,有人可以帮我吗?我认为它们是相同的,但结果不同。
“ helper(res,cur,n,k-1,i + 1);”的结果; :[[1、2],[1、3],[1、4],[2、3],[2、4],[3、4]]
“ helper(res,cur,n,--k,i + 1)”的结果:[[1,2],[2]]
是Leetcode77。组合
答案 0 :(得分:4)
执行--k时,它将更新k的值。类似于
k = k-1;
然后您将发送更新的k值。 当您仅发送值k-1时,它不会更新该值。它只是传递k-1的值
答案 1 :(得分:1)
执行ls
时,将操作结果发送到k-1
而不更改helper()
,但是执行k
时,您减小了{{1}的值}每次循环,然后将新值发送到--k
因此,如果k为4,则每次进行k
时,您将以k = 3调用helper()
,但使用helper()
时,k将为3、2、1 ...每次
答案 2 :(得分:1)
如果我理解您的问题,我会说是以下问题:
当您输入k-1时,就是告诉程序取等于k-1的值,但k保持不变
另一方面,在编写--k时,您告诉程序将k的值减1,然后取该数字,从而影响到下一个循环,因为k将其值更改了k-1
答案 3 :(得分:1)
--k
的问题在于,就像其他张贴者所说的那样,它改变了价值。请查看此page here,以获取有关Java副作用的更多信息。当您使用该减量时,整个程序范围内的k值会改变,因此所有后续函数调用都使用相同的值,该值很快会减小为0。在k-1
示例中,您要发送k-1的值在该堆栈调用中处理发送的k
值的单独实例,而不是重用相同的k
。
答案 4 :(得分:-1)
这里发生的是您正在使用预增量运算符。因此它在评估(执行)该语句之前先递增。在使用[AllowHttp]
public class ValuesController : ApiController
{
// ...
}
时,它会在之后求值,而k - 1
会在将值作为参数传递之前更改值。