面試小白的我深深地發出了疑問,面試的時候真的會有這樣的題嗎…
題目描述
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
示例 1:
輸入: n = 3
輸出: 6
示例 2:
輸入: n = 9
輸出: 45
限制:
1 <= n <= 10000
解題思路
1. 等差數列求和
首先可以想到利用n * (n + 1) / 2
的遞歸公式進行求解,然而本題不讓使用乘除法,此方法暫不考慮。
2. 利用遞歸求解
利用遞歸時需要判斷跳出遞歸的條件,本題不讓用if、for
等常用的語句,因此我們需要另想辦法。
本題要求當n遞減到0時跳出循環,因此可用n != 0
進行判斷,再利用邏輯運算符&&
,通過短路效應使循環跳出。
具體思路可參考代碼及註釋。
完整代碼
- 等差數列求和(不滿足題意)
class Solution {
public:
int sumNums(int n) {
//等差數列求和
return n*(n+1)/2;
}
};
- 利用遞歸求解(通過測試)
class Solution {
public:
int sumNums(int n) {
// 如果n爲0,則跳出遞歸循環,不會再繼續執行。
n != 0 && (n += sumNums(n-1));
return n;
}
};