k-1和--k之间的区别在这里,真的不明白

时间:2018-08-18 14:55:11

标签: java

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。组合

5 个答案:

答案 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会在将值作为参数传递之前更改值。