题目地址:
https://leetcode.com/problems/power-of-four/
给定一个32位整数 x x x,判断其是否是 4 4 4的幂次。
首先判断 x x x是否是正数,如果不是则直接返回false。再判断 x x x的二进制表示中是否只有一个 1 1 1,如果不是也返回false。接着判断 x x x的二进制表示的那个 1 1 1是否出现在右数第 1 , 3 , 5 , . . . 1,3,5,... 1,3,5,...位,如果是,则返回true;否则返回false。代码如下:
public class Solution {
public boolean isPowerOfFour(int num) {
if (num <= 0) {
return false;
}
if (num != lowbit(num)) {
return false;
}
while (num > 0) {
if ((num & 1) == 1) {
return true;
}
num >>= 2;
}
return false;
}
private int lowbit(int x) {
return x & (-x);
}
}
时间复杂度 O ( log n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)。关于lowbit函数可以参考:https://blog.csdn.net/qq_46105170/article/details/104082406。