一、题目
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
- 1 <= n <= 10000
二、解决
计算方法主要有:平均计算、迭代、递归。需要排除法一步步导向答案。
1、平均计算
思路: 不行,因为用到乘除。
代码:
public int sumNums(int n) {
return (1 + n) * n / 2;
}
时间复杂度: O ( 1 ) O(1) O(1)
空间复杂度: O ( 1 ) O(1) O(1)
2、迭代
思路: 不行,用到了循环。
代码:
public int sumNums(int n) {
int res = 0;
for(int i = 1; i <= n; i++)
res += i;
return res;
}
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
3、递归
思路1: 用到了if,思考其他方法来终止。
代码-版本1: (不行)
public int sumNums(int n) {
if(n == 1) return 1;
n += sumNums(n - 1);
return n;
}
思路2: 逻辑运算符的短路效应。
if(A && B) // 若 A 为 false ,则 B 的判断不会执行(即短路),直接判定 A && B 为 false
if(A || B