文章目录
- 1. 题目
- 2. 解题
- 2.1 通用解法
- 2.2 找规律
1. 题目
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-four
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
相关题目:LeetCode 231. 2的幂 && LeetCode 338. 比特位计数(2进制1的个数)
2.1 通用解法
class Solution {
public:bool isPowerOfFour(int n) {if(n < 1)return false;while(n%4 == 0)n /= 4;return n == 1;}
};
2.2 找规律
十进制 | 二进制 |
---|---|
40 = 1 | 1 |
41 = 4 | 100 |
42 = 16 | 1 0000 |
43 = 64 | 100 0000 |
发现4的整数次幂:只有一个1(跟2的整数次幂一致),且1在奇数位
在C/C++ 三种进制前缀:
- 二进制: 0b
- 八进制: 0
- 十六进制: 0x
设计一个只在奇数位或者只在偶数位为1的二进制数,进行位运算判断
class Solution {
public:bool isPowerOfFour(int n) {if(n < 1)return false;int k = 0b10101010101010101010101010101010;//32位if((n&(n-1)) != 0)//先判断是否为2的幂,只有一个bit为1return false;if((n&k) == 0)return true;return false;}
};
or
class Solution {
public:bool isPowerOfFour(int n) {if(n < 1)return false;int k = 0b01010101010101010101010101010101;if((n&(n-1)) != 0)//先判断是否为2的幂,只有一个bit为1return false;if((n&k) == n)return true;return false;}
};
如果图方便,可以记住那个魔法数字,不过感觉没必要,记住二进制形式就好了