本文主要是介绍[Leetcode]342. 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?
这个题解法很多,首先循环递归都能解决,不用循环和递归的话页游很多解法。
利用对数,和之前那个判断是不是3的幂一样:
class Solution {
public:bool isPowerOfFour(int num) {double d = log10 (num) / log10 (4);return (d - (int) d == 0)? true : false;}
};
先判断是不是2的幂,再判断是不是4的幂。
class Solution {
public:bool isPowerOfFour(int num) {return (num > 0) && !(num & (num - 1)) && (num & 0x55555555) == num;}
};
在我们确定了是2的幂之后,发现4的幂减1能被3整除,因为由二项式定理展开4^n - 1 = (3+1)^n - 1 = 3^n + n*3^(n-1) +.....+1 - 1,每一项都能被3整除,所以这个数能被3整除。
class Solution {
public:bool isPowerOfFour(int num) {return (num > 0) && !(num & (num - 1)) && (num - 1) % 3 == 0;}
};
这篇关于[Leetcode]342. Power of Four的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!