[打卡帖]《九日集训》诺亚方舟(第二天) 循环
剑指 Offer 64. 求1+2+…+n
刚开始我是这样写的:
int sum(int n){
if(n == 0) return n;
else return n + sumNums(n-1);
}
结果发现不能用if else, 然后看了看题解恍然大悟,直呼学到了
int sumNums(int n){
n && (n += sumNums(n-1));//n == 0为递归出口,n += sumNums(n-1)为递归主体
return n;
}
231. 2 的幂
直接求出n次幂进行判断
class Solution {
public:
long long sum(int n){//求2的n次方
if(n == 0) return 1;
else return 2 * sum(n - 1);
}
bool isPowerOfTwo(int n) {
if(n < 0) return false;
for(int i = 0; i <= 30; i++){
if(n == sum(i)) return true;
}
return false;
}
};
326. 3 的幂
class Solution {
public:
long long sum(int n){//求3的n次方,长整型防止溢出
if(n == 0) return 1;
else return 3 * sum(n - 1);
}
bool isPowerOfThree(int n) {
if(n < 0) return false;
for(int i = 0; i <= 20; i++){//根据n给定大小调整i <= 几,防止溢出
if(n == sum(i)) return true;
}
return false;
}
};
342. 4的幂
class Solution {
public:
long long sum(int n){//求4的n次方,长整型防止溢出
if(n == 0) return 1;
else return 4 * sum(n - 1);
}
bool isPowerOfFour(int n) {
if(n < 0) return false;
for(int i = 0; i <= 16; i++){//根据n给定大小调整i <= 几,防止溢出
if(n == sum(i)) return true;
}
return false;
}
};