Leetcode——数论(1)

    xiaoxiao2021-03-25  103

    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))); } };

    转载请注明原文地址: https://ju.6miu.com/read-23537.html

    最新回复(0)