Power of Four
Total Accepted: 6767 Total Submissions: 20205 Difficulty: Easy
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
思路
- 类似于power of two
- 同时因为是4,首先是power of two,所以除了第一个bit是1后面必须全部是0
- 首先是power of two,然后位数是偶数
2 10 4 100 8 1000 16 10000 32 100000 64 1000000 128 10000000 256 100000000 512 1000000000
直接做
public class Solution {
public boolean isPowerOfFour(int num) {
if (num <= 0) {
return false;
}
while (num > 1) {
if (num / 4 * 4 != num) {
return false;
}
num /= 4;
}
return true;
}
}
Bit方法
public class Solution {
public boolean isPowerOfFour(int num) {
if (num <= 0) {
return false;
}
if ((num & (num - 1)) != 0) {
return false;
}
int bit = 1;
int digit = 0;
while (true) {
if ((num & bit) == 0) {
digit++;
} else {
digit++;
break;
}
bit = bit << 1;
}
return digit % 2 == 1;
}
}