1:利用&&先判前面,若前面为假则不判后面的技巧
class Solution {
public:
int sumNums(int n) {
//(1+n)*n/2;
(n>1) && (n += sumNums(n-1));
return n;
}
};
2:利用快速幂,手写whlie循环,最多14次
class Solution {
public:
int sumNums(int n) {
int ans=0,a=n+1;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
if(n&1)ans+=a;
a+=a;
n/=2;
ans>>=1;
return ans;
}
};