劍指 Offer 64. 求1+2+…+n
阿新 • • 發佈:2020-09-16
題目描述
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)
。
示例1:
輸入: n = 3
輸出: 6
示例2:
輸入: n = 9
輸出: 45
限制:
1 <= n <= 10000
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/qiu-12n-lcof
思路解析
int sumNums(int n) {
if(n == 0)
return n;
return sumNums(n - 1) + n;
}
這是正常情況下的遞迴寫法,但是使用了if語句,需要想辦法去掉if語句。
注意邏輯運算子的短路效應:
A && B
,若A
為false
,則不再計算B
,直接返回false
;
A || B
,若A
為true
,則不再計算B
,直接返回true
;
利用這一點,實現不通過if語句的截斷。
程式碼實現
class Solution {
public:
int sumNums(int n) {
n && (n += sumNums(n-1));
return n;
}
};
狗頭解法
class Solution { public: int sumNums(int n) { bool arr[n][n+1]; return sizeof(arr)>>1; } };