练习题
1 题目描述 231. 2的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方
class Solution {
public:
bool isPowerOfTwo(int n)
{
if(n==0)
{
return 0;
}
else
{
int x;
x = n % 2;
if (x !=0)
{
if (n != 1) //在取余不为零情况下,排除n为1的情况
return 0;
else
return 1;
}
else //若取余结果为零,则递归,进一步整除
return isPowerOfTwo(n/2);
}
}
};
2 题目描述 326. 3的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
class Solution {
public:
bool isPowerOfThree(int n)
{
if(n==0)
{
return 0;
}
else
{
int x;
x = n % 3;
if (x !=0)
{
if (n != 1) //在取余不为零情况下,排除n为1的情况
return 0;
else
return 1;
}
else //若取余结果为零,则递归,进一步整除
return isPowerOfThree(n/3);
}
}
};
3 题目描述 342. 4的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x
class Solution {
public:
bool isPowerOfFour(int n)
{
if(n==0)
{
return 0;
}
else
{
int x;
x = n % 4;
if (x !=0)
{
if (n != 1) //在取余不为零情况下,排除n为1的情况
return 0;
else
return 1;
}
else //若取余结果为零,则递归,进一步整除
return isPowerOfFour(n/4);
}
}
};
4 题目描述 剑指 Offer 64. 求1+2+…+n
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
class Solution
{
int res=0;
public:
int sumNums(int n)
{
bool x = n > 1 && sumNums(n - 1) > 0;
res += n;
return res;
}
};
今日心得
1 在某些时候,可以利用短路来代替if-else语句
2 递归的思想
3 判断是否是一个数的幂的时候,需要结合取余与整除,大致思路为先取余看输入数是否为基数的倍数,若是,则将输入数除以基数后进行递归操作。不断递归直至最后递归数小于基数,此时判断递归数是否为1 ,若为1则结果为true。注意递归函数中往往需要特判,且必须有终止条件。