Leetcode 231

来源:互联网 发布:gnome和x windows 编辑:程序博客网 时间:2024/05/22 06:28

题意

判断一个数n是否是2的幂次。

思路

算法1

时间复杂度O(logn)

直接检查n能否一直除以2直到1。

算法2

时间复杂度O(1)

非常trick的一个思路,我们知道n如果是2的幂次,那么n的2进制表示中一定是1后面跟若干个0,即只有一个1。

我们利用·n & (n - 1)的性质:将最低一位1置0,即此时n & (n - 1) = 0

代码

algorithm 1

class Solution {public:    bool isPowerOfTwo(int n) {        if (n <= 0) return false;        while (n % 2 == 0) n >>= 1;        return n == 1;    }};

algorithm 2

class Solution {public:    bool isPowerOfTwo(int n) {        return n <= 0 ? false : !(n & (n - 1));    }};
0 0
原创粉丝点击