原题链接:https://leetcode-cn.com/problems/qiu-12n-lcof/
题目描述
求
1+2+...+n
,要求不能使用乘除法、for
、while
、if
、else
、switch
、case
等关键字及条件判断语句(A?B:C
)。
思路分析
本题抛开要求限制,算是入门级题目,但是加上条件限制却变成了一道思维拓展题,不涉及任何算法知识。这里给出两种解决方案:
方法一:递归法,递归需要判断终止条件,除了
if
语句,还有switch
,逻辑运算符,进而可以突破if
的限制,达到解题目的;方法二:等差数列求和公式
S n = ( 1 + n ) ∗ n 2 S_{n}=\frac{(1+n)*n}{2} Sn=2(1+n)∗n
这里出现了乘除法,现在就需要想方设法找道乘除法的替代方案,除法可以用位运算替代;乘法呢?将分子展开即有
n 2 + n n^2 + n n2+n
平方可以调用库函数pow
。
参考代码
- 方法一:递归法,其时间复杂度为 O ( n ) O(n) O(n) ,空间复杂度为 O ( 1 ) O(1) O(1) 。
class Solution {
public int sumNums(int n) {
int sum = n;
boolean flag = n > 0 && (sum += sumNums(n - 1)) > 0;
return sum;
}
}
运行结果如下:
- 方法二:等差数列公式,其时间复杂度为 O ( 1 ) O(1) O(1) ,空间复杂度为 O ( 1 ) O(1) O(1) 。
class Solution {
public int sumNums(int n) {
return ((int)Math.pow(n, 2) + n) >> 1;
}
}
运行结果如下: