张伦聪的技术博客 Research And Development

231. 2的幂

2018-08-19

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:

输入: 1
输出: true
解释: 20 = 1

示例 2:

输入: 16
输出: true
解释: 24 = 16

示例 3:

输入: 218
输出: false

解1:位运算。不管是2的正幂次还是2的负幂次肯定都大于0,如果n小于0可以直接返回false,2的负幂次如2^-3等价于1/2^3一定是小数,由于入参为int所以这种情况也不存在。所以看表格,很清晰,如果n&(n-1)为0那说明是。

2的幂次 十进制形式 二进制形式 减1二进制形式
2 ^ 0 1 00000001 00000000
2 ^ 1 2 00000010 00000001
2 ^ 2 4 00000100 00000100
2 ^ 3 8 00001000 00000111
2 ^ 4 16 00010000 00001111
2 ^ 5 32 00100000 00011111
2 ^ 6 64 01000000 00111111
class Solution {
    public boolean isPowerOfTwo(int n) {
        return (n > 0) && ((n & (n - 1)) == 0);
    }
}

解2:

class Solution {
    public boolean isPowerOfTwo(int n) {
        //return (n > 0) && ((n & (n - 1)) == 0);
        if (n < 1) {
            return false;
        }
        while (n != 1) {
            if (n % 2 == 1) {
                return false;
            }
            n /= 2;
        }
        return true;
    }
}

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主

类似文章

上一篇 9. 回文数

下一篇 263. 丑数

留言