算法-邏輯符短路-求1+2+…+n

算法-邏輯符短路-求1+2+…+n

1 題目概述

1.1 題目出處

https://leetcode-cn.com/problems/qiu-12n-lcof/

1.2 題目描述

求 1+2+…+n 。

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

示例 1:

輸入: n = 3
輸出: 6
示例 2:

輸入: n = 9
輸出: 45

限制:

1 <= n <= 10000

2 遞歸-邏輯符短路

2.1 思路

等差數列求和,本來是可以用求和公式但因爲含乘法不符合題意,所以不行。

採用循環也不行,因爲有for不符合題意。

轉而想到用遞歸,但遞歸內結束條件必須有if (n > 0),有if,不符合題意,所以必須重新想個辦法:邏輯符短路

boolean flag = n > 0 && sumNums(n - 1) > 0

在Java內,如果上式中左側條件n > 0不爲真,則直接短路退出,不再執行右邊計算了。

2.2 代碼

private int result = 0;
public int sumNums(int n) {
    boolean flag = n > 0 && sumNums(n - 1) > 0
    result += n;
    return result;
}

2.3 時間複雜度

在這裏插入圖片描述
O(N)

2.4 空間複雜度

O(N)

  • 因爲需要遞歸

3 遞歸-異常短路

3.1 思路

既然不能直接if,那麼我們就想想什麼情況下0或者-1會造成異常呢?

首先想到 1 / 0 ,但題目要求不能用除法,所以不符合題意。

再想到數組下標不能小於0,那麼就可以用此來限制-1.

3.2 代碼

class Solution {
    int result = 0;
    int[] all = new int[10001];
    public int sumNums(int n) {
        try{
            int i = all[n];
            result = n + sumNums(n - 1);
            return result;
        }catch(Exception e){
            return 0;
        }
    }
}

3.3 時間複雜度

在這裏插入圖片描述
O(N)

3.4 空間複雜度

O(N)

  • 因爲需要遞歸

參考文檔

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