对于这道题,我第一个反应就是高斯的算法,首位相加乘以一半的数量(奇数要加中间值)
class Solution {
public int sumNums(int n) {
//求出中间值
int key=n/2;
//设置结果
int sum = 0;
//如果是奇数,加上中位数
boolean flag = (n%2)>0 && (sum+=key+1)>0;
//加上首尾和的n/2倍
sum+=(1+n)*key;
return sum;
}
}
如果是递归的解法
class Solution {
public int sumNums(int n) {
int sum = n;
//当n==0时,自动停止递归(很好的使用了阻断机制)
boolean flag = n > 0 && (sum += sumNums(n - 1)) > 0;
return sum;
}
}
反正都用到了&&的阻断机制,一定要重点记忆,这是一个可以代替if-else的方法