算法-逻辑符短路-求1+2+…+n
1 题目概述
1.1 题目出处
https://leetcode-cn.com/problems/qiu-12n-lcof/
1.2 题目描述
求 1+2+…+n 。
注意:要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
2 递归-逻辑符短路
2.1 思路
等差数列求和,本来是可以用求和公式但因为含乘法不符合题意,所以不行。
采用循环也不行,因为有for不符合题意。
转而想到用递归,但递归内结束条件必须有if (n > 0)
,有if
,不符合题意,所以必须重新想个办法:逻辑符短路
boolean flag = n > 0 && sumNums(n - 1) > 0
在Java内,如果上式中左侧条件n > 0
不为真,则直接短路退出,不再执行右边计算了。
2.2 代码
private int result = 0;
public int sumNums(int n) {
boolean flag = n > 0 && sumNums(n - 1) > 0
result += n;
return result;
}
2.3 时间复杂度
O(N)
2.4 空间复杂度
O(N)
- 因为需要递归
3 递归-异常短路
3.1 思路
既然不能直接if,那么我们就想想什么情况下0或者-1会造成异常呢?
首先想到 1 / 0 ,但题目要求不能用除法,所以不符合题意。
再想到数组下标不能小于0,那么就可以用此来限制-1.
3.2 代码
class Solution {
int result = 0;
int[] all = new int[10001];
public int sumNums(int n) {
try{
int i = all[n];
result = n + sumNums(n - 1);
return result;
}catch(Exception e){
return 0;
}
}
}
3.3 时间复杂度
O(N)
3.4 空间复杂度
O(N)
- 因为需要递归