面試題.64 LeetCode題目 “求1 +2 +...+n”

面試小白的我深深地發出了疑問,面試的時候真的會有這樣的題嗎…

題目描述

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進行判斷,再利用邏輯運算符&&,通過短路效應使循環跳出。

具體思路可參考代碼及註釋。

完整代碼

  1. 等差數列求和(不滿足題意)
class Solution {
public:
    int sumNums(int n) {
      //等差數列求和
      return n*(n+1)/2;
    }
};
  1. 利用遞歸求解(通過測試)
class Solution {
public:
    int sumNums(int n) {
      // 如果n爲0,則跳出遞歸循環,不會再繼續執行。
      n != 0 && (n += sumNums(n-1));
      return n;
    }
};

性能結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章