题解 | #求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; } };