力扣刷题——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)    收藏  举报

导航