算法-邏輯符短路-求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)
- 因爲需要遞歸