
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
数据范围: 0
输入:
5
返回值:
15
示例2
输入:
1
返回值:
1
思路/解法
方式一
不能使用循环,则可以使用递归,那么关键在于如何终止递归,即到0时终止递归,此时我们可以使用&&的短路逻辑进行终止递归。
class Solution {
public:
int Sum_Solution(int n) {
//使用&&的短路逻辑,因为x&&y,如果x为false或者0时,那么会直接调用当前逻辑,即y不会执行
n && (n += Sum_Solution(n -1));
return n;
}
};
方式二
根据数学知识,该题的求和公式为n*(n+1)/2,那么我们这个过程中无法使用乘法和除法,即我们可以使用内存空间(字符数组,只占一个字节)来表示我们的乘法所占空间,即如果n为5,那么我们开辟char res[n][n+1]的空间,那么对该空间sizeof(res)为30,再将其右移1位,即可得到求和大小。
class Solution {
public:
int Sum_Solution(int n) {
char res[n][n+1];
return sizeof(res) >> 1;
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)