1.题目
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
2.我的题解
- 首先乘法的公式不能用;
- 递归时结束判断不能用
if
;
2.1 递归解法
- 递归求解;
- 短路原理代替递归结束的
if
判断; - 时间复杂度:
O(n)
;
class Solution {
public:
int Sum_Solution(int n) {
int sum=n;
bool flag = n && (sum+=Sum_Solution(n-1));
return sum;
}
};
3.别人的题解
3.1 二进制乘法
- 参照十进制乘法:分位乘,再相加;
- 任一个乘数为零则需要退出递归;
-
- 时间复杂度:
O(logn)
;
- 时间复杂度:
class Solution {
long long int mask[2] = { 0x00,0xffffffff };
int multiply(int m, int n) {
int res = 0;
bool flag = m && n && (res = (m & mask[n & 1]) + multiply(m << 1, n >> 1));
return res;
}
public:
int Sum_Solution(int n) {
return (multiply(n+1, n)) >> 1;
}
};
4.总结与反思
(1)&&
短路原理;
(2)二进制乘法;