leetcode--231. 2的幂
作者:互联网
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
第一种思路:直接循环查找
class Solution {
public:
bool isPowerOfTwo(int n) {
int flag = 0;
for(int i = 0;i <= 32;++i)
{
if(pow(2,i) == n)
flag = 1;
}
if(flag)
return true;
else
return false;
}
};
第二种思路:此题判断该数字二进制中一的个数,如果非负,其中一的位数只有一位就一定是2的幂,否则就为2的幂,所以可以采取一位一位的判断比较,但是这样就更慢,所以可以采取其他办法,即n&(n-1)一定可以消去右边第一个出现的1,大家可以这样理解,不管对于n中最后一个一的位置如何比如为....1000...(N个)假设1的后面有N个0,对于该数字减一而言就变成了....01111....(N个)后面的0全部就因为借位变成了1,此时将两个数字相与就会把最后一个1之后(包括1)全部变成了0.所以我们消去一个1之后如果还有1 那么这个数一定不为0,所以只需要进行与运算之后判断是否为0即可
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0) return false;
return (n&(n-1))==0;
}
};
标签:示例,int,....,231,public,isPowerOfTwo,true,leetcode 来源: https://blog.csdn.net/qq_40511966/article/details/99948189