题目
思路
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
解法
短路法
例:
A&&B ,当A 等于false时,B不会执行,则B被短路
A||B 当A等于true 时,B 不会执行,则B被短路
在不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
这样的条件下,使用递归
实现,
而你最容易想到的是下面的代码
public int sumNums(int n) {
if(n<=0) return 0;
return n+sumNums(n-1);
}
不让用if ,转化为短路法 n==0 && sumNum(n-1)
就有这个条件,看代码吧!
希望下次遇到了还能想起来,本来之前做过类似的,就只想起有个什么中断的方法,就是想不起来是啥。
短路法
class Solution {
int res = 0;
public int sumNums(int n) {
boolean x = n>0 && sumNums(n-1)>0; //这里其实是为了符合语法不让报错,sumNums(n-1) >0其实只是想执行递归语句而已,>0是为了不让报错。
res+=n;
return res;
}
}