231. 2的幂

2022-10-26 18:12:05 浏览数 (1)

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

示例 1:

代码语言:javascript复制
输入: 1
输出: true
解释: 20 = 1

示例 2:

代码语言:javascript复制
输入: 16
输出: true
解释: 24 = 16

示例 3:

代码语言:javascript复制
输入: 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

代码语言:javascript复制
class Solution {
    public boolean isPowerOfTwo(int n) {
        return (n > 0) && ((n & (n - 1)) == 0);
    }
}

解2:

代码语言:javascript复制
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;
    }
}

0 人点赞