版权声明:转载请注明原址,有错误欢迎指出 https://blog.csdn.net/iwts_24/article/details/83374522
题目链接
https://leetcode-cn.com/problems/power-of-two/
题意
中文题,题面意思,给一个整数判定是否为2的幂。
题解
有趣的一个题,就是太水了。直接暴力也能做其实,不过时间没试。大概就是for循环持续计算2的幂,也可以打表储存值。然后for循环表来比较整数,如果恰好相等就返回true,如果碰见整数小于表值的情况那就是false。
不过刚看这个题感觉应该考虑二进制的写法,毕竟2的幂猜也能猜绝壁要用位运算。2的幂的二进制一定是1后面跟一堆0的情况,这个在最早学权值的时候就理解了。那么n-1的二进制就是0后面一堆1的情况。那么n & n-1,如果满足2的幂的话值就是0了。这样就简单地解决了问题。
不过很疑惑= =Java跑出来时间是4ms,显示还有55%+的Java代码更快,我是除了预先求终值打表直接输出答案的情况想不出来更快的了= =莫非暴力更快?求大佬解答。
Java 代码
class Solution {
public boolean isPowerOfTwo(int n) {
if(n < 1) return false;
if((n & (n-1)) == 0){
return true;
}
return false;
}
}