leetcode:231. 2 的幂
题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
提示:
进阶:你能够不使用循环/递归解决此问题吗?
示例:
输入:n = 1输出:true解释:20 = 1
输入:n = 16输出:true解释:24 = 16
输入:n = 3输出:false
输入:n = 4输出:true
输入:n = 5输出:false
解答 & 代码
如果一个数是 2 的幂,那么其二进制表示中只会有一个 1,例如:
| 数 | 1 | 2 | 4 | 8 | 16 | 32 |
|---|---|---|---|---|---|---|
| 二进制表示 | 1 | 10 | 100 | 1000 | 10000 | 100000 |
而 n & (n-1) 会消除整数 n 的二进制表示的最后一个 1。
因此,只需要判断一个数 n 是否是正数,且 (n & (n - 1)) == 0 即可。
注意
(n & (n - 1)) == 0的括号一定要加上,否则(n - 1) == 0的运算优先级高于&class Solution {public:bool isPowerOfTwo(int n) {return n > 0 && ((n & (n - 1)) == 0);}};
复杂度分析:
时间复杂度 O(1):
- 空间复杂度 O(1):
执行结果:
执行结果:通过执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户内存消耗:5.5 MB, 在所有 C++ 提交中击败了 99.93% 的用户
