求1+2+3+...+n
求1+2+3+...+n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
本题限制颇多,仔细想想,最合适的算法应该就是递归了
Sum_Solution(n)=n+Sum_Solution(n-1)
public class Solution {
public int Sum_Solution(int n) {
if(n==0){
return 0;
}
int ans=n;
ans+=Sum_Solution(n-1);
return ans;
}
}
记住递归能解决这类问题
但是!注意题目是不让用if的,怎么解决?
class Solution {
public:
int Sum_Solution(int n) {
int sum=n;
sum && (sum+=Sum_Solution(n-1));
return sum;
}
};
&&是短路运算的,如果判断sum==0,那么sum+=Sum_Solution(n-1)就不会算,就直接返回0了。很巧妙,借助布尔运算和它的短路特性,将if要执行的句子和判断条件一起进行布尔运算,达到了判断的作用。要学会这种方法,它是和if判断等价的(当然,要执行的句子如果多于一句就比较麻烦了)
又但是!上面的代码是C++的,java中int不能直接转为boolean用,所以需要多写点,没有那么简洁了:
public class Solution {
public int Sum_Solution(int n) {
int ans = n;
/*
必须创建一个boolean变量
第一个ans!=0好理解,第二个((ans += Sum_Solution(n - 1))!=0)),里面的ans += Sum_Solution(n - 1),其实最后得到的就是ans,这个打印出来就明白了。所以相当于先进行ans+=运算,再判断ans!=0.当然这个判断是没用的,因为它一定大于0,只是为了在布尔表达式中执行这么一个+=操作必须要有一个表达式存在
*/
boolean t=((ans!=0) && ((ans += Sum_Solution(n - 1))!=0));
return ans;
}
}

浙公网安备 33010602011771号