1. 程式人生 > 實用技巧 >劍指 Offer 64. 求1+2+…+n

劍指 Offer 64. 求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

來源:力扣(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,若Afalse,則不再計算B,直接返回false
A || B,若Atrue,則不再計算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;
    }
};