通知 网站从因情语写改为晴雨,这个网站的模板也从calmlog_ex改为 whimurmur

leetcode 剑指 Offer 64. 求1+2+…+n

67人浏览 / 0人评论 / | 作者:whisper  | 分类: 剑指offer2  | 标签: 剑指offer2  | 

作者:whisper

链接:https://www.proprogrammar.com/article/855

声明:请尊重原作者的劳动,如需转载请注明出处


剑指 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

难度:中等;标签:无;编程语言:JAVA


我的解法

class Solution {
    int[] dp = new int[5001];
    {
        for(int i = 1; i < dp.length; i++){
            dp[i] = dp[i - 1] + i;
        }
    }
    public int sumNums(int n) {
        if(n > 5000){
            return dp[5000] + (n - 5000) * 5000 + dp[n-5000];
        }

        return dp[n];
    }
}

n的范围是<10000,事先算一下5000以内的,5000以外的通过5000以内的算一下


其它解法

class Solution {
    public int sumNums(int n) {
        int sum = n;
        boolean flag = n > 0 && (sum += sumNums(n - 1)) > 0;
        return sum;
    }
}

这里就是语言技巧了,总得来说就是递归,这样写代码短,这里用逻辑运算技巧使代码变短,还可以用:?使代码变短


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告