原题:Leetcode 231
点击跳转
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例1:
输入: 1
输出: true
解释: 20 = 1
示例2:
输入: 16
输出: true
解释: 24 = 16
示例3:
输入: 218
输出: false
1.暴力解法
思路很简单,如果n不是2的幂,那么做有限次n=n除以2后,得到的n是个奇数,利用这一点有了下面的解答。
public class Solution {
public bool IsPowerOfTwo(int n) {
if(n<=0)
return false;
while(n!=1)
{
if(n%2==1)
return false;
n=n/2;
}
return true;
}
}
代码测试是没有问题的,但是提交的时候显示超出了时间限制,所以这里思考其他解答
2.位运算
我们知道,如果n是2的幂的话,那么将n转化位2进制数后n二进制最高位为 1,其余所有位为 0,同时,n-1的最高位为0,其它位为1,所以,如果n为二进制数,有n&(n-1)==0;
public class Solution {
public bool IsPowerOfTwo(int n) {
return (n>0)&&(n & (n - 1)) == 0;
}
}