leetcode Power of Four
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?
题意: 给定一个有符号整形,让你判断它是不是4的次方数
思路:
方法一:
直接循环求解(每次看看能不能整除,每次除以4),这里就不贴代码了。
方法二
power of two的时候,我们用 n &(n-1) ==0 来判断是否是2的次方数,这里也先判断一下是否为2的次方数。然后再把不是4的次方数排除掉,比如8.
我们来看看2的次方数的规律:
1 | 1 => 1 |
我们发现,每次不过是将1向左移动一个位置,然后低位补0(这不是废话么= =)
那么4的次方数就是将1向左移动两个位置喽 (还是废话(╯-_-)╯╧╧)
观察一下位置,4的次方中的1只出现在奇数的位置上!就是说,上面的二进制从右往左,第1,3,5,……位置上。
So,如果我们与上一个可以在奇数上面选择位置的数,也就是 0101 0101 ……那么就把不是4次方的排除掉啦
0101 0101 …… 十六进制表示为: 0x55555555
C++ 1
2
3
4
5
6class Solution {
public:
bool isPowerOfFour(int num) {
return num > 0 && (num & (num - 1)) ==0 && (num & 0x55555555) !=0;
}
};
Java 1
2
3
4
5public class Solution {
public boolean isPowerOfFour(int num) {
return num > 0 && (num & (num - 1)) ==0 && (num & 0x55555555) !=0;
}
}
Python 1
2
3
4
5
6
7class Solution(object):
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
return num > 0 and num & (num - 1) == 0 and num & 0x55555555 != 0
本题是leetcode 342 Power of Four solution 题解,
更多题解可以查看:https://www.hrwhisper.me/leetcode-algorithm-solution/
附带上power of two题解
leetcode 231 Power of Two
Given an integer, write a function to determine if it is a power of two.
题意: 给定一个整形,让你判断它是不是2的次方数
思路:
方法一:
直接循环求解(每次看看能不能整除,每次除以2)
方法二
1 | bool isPowerOfTwo(int n) { |