Leetcode——数论(1)

1、power of two

判断是否是2的次方数?

我们来观察下2的次方数的二进制写法的特点:

1     2       4         8         16   ....

1    10    100    1000    10000 ....

那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,

思想1:只要每次判断最低位是否为1,然后向右移位,最后统计1的个数即可判断是否是2的次方数

思想2:二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0。

技巧:Bit Operation(位操作) 

代码如下:

方法1:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        int cnt = 0;
        while (n > 0) {
            cnt += (n & 1);
            n >>= 1;
        }
        return cnt == 1;
    } 
};
方法2:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        return (n > 0) && (!(n & (n - 1)));
    } 
};


你可能感兴趣的:(Leetcode——链表,leetcode,算法,编程,C++)