64-求1+2+…+n
小于 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;
}