Leetcode——数论(1)

来源:互联网 发布:suse linux 10 下载 编辑:程序博客网 时间:2024/05/22 10:59

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


0 0
原创粉丝点击