算法-逻辑符短路-求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)

  • 因为需要递归

参考文档

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