前言:本来想写了某公司的笔试题来放松一下的,未遂。
求
1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
分析:
不知道有短路的语法,不知如何下笔。
如下,这样看:
//常规方法
public int sumNums(int n) {
if(n == 1) return 1;
n += sumNums(n - 1);
return n;
}
但是!并没有。先看一个自己没想到的C++做法!
class Solution {
public:
int sumNums(int n) {
bool a[n][n+1]; // n*(n+1)/2
return sizeof(a)>>1;
}
};
回归常规做法:
避免if的判断我们可以使用短路(&&)进行操作。
res = 0;
int sumNums(int n){
bool flag = n > 1 && (sumNum(n-1)) > 0;
res += n;
return n;
}