题解 | #求1+2+3+...+n#

求1+2+3+...+n

http://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1

题目难度:中等
题目考察:数学
题目内容:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
题目分析:
求1到n的和,我们小学就知道了,首项加尾项乘以项数除以2,发现这个问题就这么被解决了
算法1
直接用公式

class Solution {
public:
    int Sum_Solution(int n) {
        return (1+n)*n/2;
    }
};

时间复杂度O(1)
空间复杂度O(1)
还有什么做法呢,递归,但是问题在于题目要求不能用各种语句,意味着没有办法写递归终止语句,但是可以用短路求值,下面来介绍什么是短路求值,说人话就是如果已经判断出该表达式的值了后面的就不用判断了
比如1||(3>2),前面1是true 这时已经能判断出1||(3>2)是ture了,后面的(3>2)没必要再判断了,这个题就可以利用这个性质,
看图
图片说明
下面给出代码

class Solution {
public:
    int Sum_Solution(int n) {
        n && (n += Sum_Solution(n - 1)); 
        //A&&B 1.A为true,则计算并返回表达式B的bool值                             
        //2.A为false,则直接返回false
        return n;
    }
};
全部评论

相关推荐

贪食滴🐶:你说熟悉扣篮的底层原理,有过隔扣职业球员的实战经验吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务