LeetCode面試題64. 面試題64. 求1+2+…+n,每日一題6月2日

題目描述:

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/qiu-12n-lcof/

示例 1:

輸入: n = 3
輸出: 6

示例 2:

輸入: n = 9
輸出: 45

解題思路:

不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

那麼求和公式用不了,遍歷求和也用不了

我們來試一下遞歸

    int sumNums(int n) {
        if(n==1) return n;
        return n+sumNums(n-1);
    }

可以看到遞歸也是要用到一句if,我們可以看看怎麼把這條if去掉
if (n==1) return n;
也就是說如果n==1,需要終止遞歸,所以我們想到了邏輯與&&連接符。
A&&B,表示如果A成立則執行B,否則如果A不成立,不用執行B
因此我們可以這樣。在n>=1的時候,執行遞歸函數。

代碼如下:

class Solution {
public:
    int sumNums(int n) {
        int res = n;
        //當res>=1時,&&語句後面部分執行,直到res=0
        //1+2+3+...+n=0+1+2+3+...+n
        res&&(res+=sumNums(res-1));
        return res;
    }
};

 

 

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