跳至主要內容

64-求1+2+…+n

daipeng小于 1 分钟

1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

关键在于如何结束整个过程,这里使用 && 的短路能力。

第一种

通过一个可以更改其属性的对象来返回最终结果,通过&& 来提前结束计算。

   private static class Holder {
        int val;
    }

    public int sumNums(int n) {
        Holder holder = new Holder();
        sumNumsCore(n, holder);
        return holder.val;
    }

    public boolean sumNumsCore(int n,Holder holder) {
        boolean flag = n > 0 && sumNumsCore(n - 1, holder);
        holder.val = holder.val + n;
        return flag;
    }

第二种

leetcode上的官方解答,更加简洁。

   public int sumNums(int n) {
        boolean flag = n > 0 && (n += sumNums(n - 1)) > 0;
        return n;
    }