逻辑运算符的短路性质
快速乘法
class Solution {
public:
int sumNums(int n) {
bool a[n][n+1];
return sizeof(a)>>1;
}
};
//ans=1+2+3+...+n
// =(1+n)*n/2
// =sizeof(bool a[n][n+1])/2
// =sizeof(a)>>1
这个真的厉害,利用了bool类型所占空间为1,创建n行n+1列的数组,然后直接计算其大小就是其中n*(n+1)的值,然后移位运算符除2
class Solution {
public:
int sum=0;
int sumand(int n){
sum+=n;
return n&&sumand(--n);
}
int sumNums(int n) {
//sum+=n;
sumand(n);
return sum;
}
};
看了官方题解的思路:力扣
短路性质:
以逻辑运算符 && 为例,对于 A && B 这个表达式,如果 A 表达式返回False ,那么 A && B 已经确定为False ,此时不会去执行表达式 B。同理,对于逻辑运算符 ||, 对于 A || B 这个表达式,如果 A 表达式返回True ,那么 A || B 已经确定为True ,此时不会去执行表达式 B
利用这一特性,我们可以将判断是否为递归的出口看作 A && B 表达式中的 A 部分,递归的主体函数看作 B 部分。如果不是递归出口,则返回True,并继续执行表达式 B 的部分,否则递归结束。当然,你也可以用逻辑运算符 || 给出类似的实现,这里我们只提供结合逻辑运算符 && 的递归实现。
关键在于短路性质