問題:
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?
大意:
給出一個(gè)數(shù)字(有符號(hào)32位)勇哗,寫一個(gè)函數(shù)來(lái)檢查它是不是4的次方數(shù)昼扛。
例子:
給出 num = 16,返回true欲诺。給出 num = 15抄谐,返回false。
進(jìn)階:你能不能不用循環(huán)或者遞歸來(lái)解決它扰法。
思路:
這道題也是老題目了蛹含,既可以用判斷2的次方數(shù)的方法稍作修改,即轉(zhuǎn)化為二進(jìn)制數(shù)后判斷1后面的0個(gè)數(shù)是不是雙數(shù)塞颁。也可以直接用判斷3的次方數(shù)的方法來(lái)做浦箱,直接求對(duì)數(shù)。
代碼1(Java):
public class Solution {
public boolean isPowerOfFour(int num) {
// 轉(zhuǎn)化為二進(jìn)制數(shù)來(lái)判斷
if (num < 0) return false;
String binaryStr = Integer.toBinaryString(num);
for (int i = 0; i < binaryStr.length(); i++) {
if (i == 0 && binaryStr.charAt(i) !='1') return false;
else if (i > 0 && binaryStr.charAt(i) != '0') return false;
}
if (binaryStr.length() % 2 != 1) return false;
return true;
}
}
代碼2(Java):
public class Solution {
public boolean isPowerOfFour(int num) {
// 求對(duì)數(shù)
return (num > 0 && (Math.log10(num) / Math.log10(4)) % 1 == 0);
}
}
合集:https://github.com/Cloudox/LeetCode-Record