题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
解法一:利用逻辑与的短路特性实现递归终止 (执行用时:0ms,内存消耗6.3MB)
重点是输入0的时候输出0来结束递归。缺点:递归的层数不能太深<3000
class Solution {
public:
int sumNums(int n) {
int ans = n;
ans && (ans += sumNums(n - 1));
return ans;
}
};
解法二:利用bool或者char类型计算二维数组的大小 (执行用时:0ms,内存消耗6MB)
/*****************************************************
解法二:利用bool或者char类型计算二维数组的大小 (执行用时:0ms,内存消耗6MB)
思路:
bool类型和char类型都占用一个字节长度
用sizeof计算数组a所占空间的大小为n*(n+1),再右移一位相当于除2,等价于等差数列的前n项和公式
sizeof用来计算一个变量,或者数据类型的长度,以字节为单位。
对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。
*****************************************************/
class Solution2 {
public:
int sumNums(int n) {
char a[n][n + 1]; //bool类型和char类型都占用一个字节长度
return sizeof(a) >> 1; //用sizeof计算数组a所占空间的大小为n*(n+1),再右移一位相当于除2,等价于等差数列的前n项和公式
}
};