持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
一、题目描述:
231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
输入:n = 1
输出:true
解释:20 = 1
示例 2:
输入:n = 16
输出:true
解释:24 = 16
示例 3:
输入:n = 3
输出:false
示例 4:
输入:n = 4
输出:true
示例 5:
输入:n = 5
输出:false
提示:
- -2^31 <= n <= 2^31 - 1
二、思路分析:
打表
这种方法也比较简单和直接,要判断是不是 n 的幂,由于 int 是有范围的,所以最终的结果其实也是固定的一些数,那么我们提前找出这些数判断即可。
打表也是判断 n 的幂的通用解法之一,虽然看上去似乎太?,但是实际上这种方法在我们真正写项目过程中反而常用一些。
当然,我们也可以不打表,而是直接计算出对应的值,然后判断是否相等也行。显然打表的时间复杂度位 O(1).
三、AC 代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
switch (n) {
case 1:
case 2:
case 4:
case 8:
case 16:
case 32:
case 64:
case 128:
case 256:
case 512:
case 1024:
case 2048:
case 4096:
case 8192:
case 16384:
case 32768:
case 65536:
case 131072:
case 262144:
case 524288:
case 1048576:
case 2097152:
case 4194304:
case 8388608:
case 16777216:
case 33554432:
case 67108864:
case 134217728:
case 268435456:
case 536870912:
case 1073741824:
return true;
default:
return false;
}
}
};
四、总结:
高级的还有二进制解法,简单说下原理
2 的幂其实就是只有一个 1 的二进制数,因此,我们可以利用这一点来判断,如果只有一个 1,那么就是 2 的幂。
而判断是否只有一个 1,也有两种方法:
- 我们清除这个 1,如果结果是 0,那么就满足
- 获取 1 的位置,如果和原数相同,那么也满足
范文参考: