《剑指Offer》64.求1+2+…+n

1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

方法一:暴力法

该方法使用了for循环,违反了题目的要求。

1
2
3
4
5
6
7
8
9
class Solution {
public int sumNums(int n) {
int sum = 0;
for (int i = 1; i <=n; i++) {
sum += i;
}
return sum;
}
}

复杂度分析:时间复杂度为O(n),空间复杂度为O(1)。

方法二:等差数列求和

该方法使用了乘除法,违反了题目的要求。

1
2
3
4
5
class Solution {
public int sumNums(int n) {
return (n + 1) * n / 2;
}
}

复杂度分析:时间复杂度和空间复杂度均为O(1)。

方法三:递归

该方法使用了if条件判断,违反了题目的要求。

1
2
3
4
5
6
7
8
class Solution {
public int sumNums(int n) {
if (n == 0) {
return 0;
}
return n + sumNums(n - 1);
}
}

复杂度分析:时间复杂度和空间复杂度均为O(n)。

方法四:递归(无if)

1
2
3
4
5
6
7
class Solution {
public int sumNums(int n) {
int sum = n;
boolean flag = n > 0 && (sum += sumNums(n - 1)) > 0;
return sum;
}
}

复杂度分析:时间复杂度和空间复杂度均为O(n)。


----------本文结束感谢您的阅读----------
坚持原创技术分享,您的支持将鼓励我继续创作!