算法
概:偶尔在Leetcode上刷一手算法,今天这个每日一题对我这种菜狗来说就很有感觉,看完官方题解直接恍然大悟,就很痛快,所以记一手。
题目
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
范例
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
难点及对应思路
- 这题一看,害不就是求一手累加吗,但是他歹毒就歹毒在限制多得离谱,基础循环判断全都封了,连if都不让你用。第一反应:不让循环反手递归,然后当时的我就一手递归上头写着写着就用了if,然后交了 通过了,之后经过别人提醒,反应过来:我竟然用了if。。。。。
- 思路,不让循环就递归,没得毛病,但是递归得跳出,而且不能用if和switch这些判断跳出,这时候得想到逻辑短路这个操作,即:A&&B,当A为false,那么B无论怎样结果都是false,那么计算机就不会去过B这里,若B是个运算语句,那么这条语句就会被跳过不执行,所以,如果我们将递归语句写在了B的位置,A的位置放上某个数字的检测,当这个数字达到检测值之后,B会被直接跳过,既不会再往下递归,递归就跳出了
java代码
class Solution {
public int sumNums(int n) {
//主函数调用这个方法
int[]a = new int [1];
a[0] = 0;
sumNums2(n,a);
return a[0];
}
public boolean sumNums2(int n,int []a)
{
a[0]+=n;
return (n!=0)&&sumNums2(n-1,a);
}
}