【问题描述】[中等]
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。输入: n = 3
输出: 6
【解答思路】
1. 递归(不合符题意)
时间复杂度:O(N^2) 空间复杂度:O(N)
public int sumNums(int n) {if(n == 1) return 1;n += sumNums(n - 1);return n;
}
2. 逻辑运算符与递归
时间复杂度:O(N) 空间复杂度:O(N)
class Solution {int res = 0;public int sumNums(int n) {boolean x = n > 1 && sumNums(n - 1) > 0;res += n;return res;}
}
class Solution {public int sumNums(int n) {boolean x = n > 1 && (n += sumNums(n - 1)) > 0;return n;}
}
3. 迭代(不合符题意)
循环必须使用 while 或 for
时间复杂度:O(N) 空间复杂度:O(1)
public int sumNums(int n) {int res = 0;for(int i = 1; i <= n; i++)res += i;return res;
}
4. 高斯求和公式(不合符题意)
高斯求和必须使用 乘除法
时间复杂度:O(1) 空间复杂度:O(1)
public int sumNums(int n) {return (1 + n) * n / 2;
}
【总结】
1.逻辑运算符短路效应
2. 思路往往从暴力开始,到常规做法到逐步优化
3. Java中运算符优先级顺序
转载链接:https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/