-
题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。 -
方法一:二进制表示
一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1个 1。
因此我们可以考虑使用位运算,将 n 的二进制表示中最低位的那个 1 提取出来,再判断剩余的数值是否为 0即可。
-
第一个技巧是 n & (n - 1)
-
第二个技巧是 n & (-n)
-
代码
class Solution { public boolean isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; } } class Solution { public boolean isPowerOfTwo(int n) { return n > 0 && (n & -n) == n; } }
-
复杂度分析
时间复杂度:O(1)。
空间复杂度:O(1)。
-
方法二:判断是否为最大 2 的幂的约数
在题目给定的 32 位有符号整数的范围内,最大的 2的幂为 2^ {30} = 1073741824。我们只需要判断 n是否是 2^{30}的约数即可。
-
代码
class Solution { static final int BIG = 1 << 30; public boolean isPowerOfTwo(int n) { return n > 0 && BIG % n == 0; } }
-
复杂度分析
时间复杂度:O(1)。
空间复杂度:O(1)。
231. 2的幂
最新推荐文章于 2024-07-16 23:15:32 发布