力扣刷题——231. 2 的幂
231. 2 的幂
位运算
不太懂位运算,一开始这样乱写
class Solution {
public boolean isPowerOfTwo(int n) {
if (n == 1) return true;//特判
return (n & 1) == 1 ? false : true;
}
}
这样写只是考虑到二进制的最右位,只是判定了奇偶数而已
来找一下规律
1->1
2->10
4->100
8->1000
...
只有第一位是1,如果减去1就变成
0->0
1->01
3-> 011
7->0111
...
上面和下面的数与运算是1,所以可以这样写
class Solution {
public boolean isPowerOfTwo(int n) {
return (n & (n - 1)) == 0 ? true : false;
}
}
但是n=0时还是错的,需要改进
class Solution {
public boolean isPowerOfTwo(int n) {
return (n > 0) && (n & (n - 1)) == 0 ? true : false;
}
}
posted on 2023-02-22 01:31 pumpkinsBig 阅读(16) 评论(0) 收藏 举报
浙公网安备 33010602011771号