Day 06
停更了好一阵子,也不是不想写,只是总是坚持不下来,再加上被题一直虐都没心态了。重拾信心再次开启自己的努力之旅我也遇到了那个她,我要和她一起努力,为了以后更好的生活。冲鸭!!
2的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。
如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
链接:https://leetcode-cn.com/problems/power-of-two
来源:力扣(LeetCode)
思路:开始的时候审题不仔细,以为直接判断是否整除2就可以,但是后来发现不对劲…那是判断是否为偶数,然后就只想到递归了。看到题解以后感觉智商被按在地上碾压了。现在将解题方法整理出来
第一个技巧是
n & n-1
该位运算技巧可以直接将 n 二进制表示的最低位 1 移除如果n为2的倍数,那么转换成为二进制的时候只有一位为1
所以减1以后再 按位与 应该会得到0所以可以用这种方法判断是否为2的幂
第二个技巧是
n & -n
-n 是 n 的相反数,是一个负数。该位运算技巧可以直接获取 n 二进制表示的最低位的 1
因为负数的二进制表示方法是补码存储,因此与整数 按位与 只会得到最低位的1
因此如果结果为n,则可以知道高位都是0,只有低位的一个1,因此也是2的幂
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & -n) == n;
}
}