1 題目描述
- 2的冪:
給定一個整數,編寫一個函數來判斷它是否是 2 的冪次方。 - 3的冪:
給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。 - 4的冪:
給定一個整數 (32 位有符號整數),請編寫一個函數來判斷它是否是 4 的冪次方。
2 解題思路
- 萬能解法:-- 循環解決
讓n去循環除以要判斷的那個數,取餘循環判斷
對於2來說,代碼如下:
class Solution {
public boolean isPowerOfTwo(int n) {
if(n == 0){
return false;
}
while(n % 2 ==0){
n = n / 2;
}
return n == 1;
}
}
- 位運算解法:
針對2來說的:
移位運算:把二進制數進行左右移位。左移1位,擴大2倍;右移1位,縮小2倍。
return (n>0) && (1<<30) % n == 0;
解釋:1<<30得到最大的2的整數次冪,對n取模如果等於0,說明n只有因子2。
針對3 來說,代碼如下
class Solution {
public boolean isPowerOfThree(int n) {
//3的冪次的質因子只有3,而所給出的n如果也是3的冪次,
//故而題目中所給整數範圍內最大的3的冪次的因子只能是3的冪次,
//1162261467是3的19次冪,是整數範圍內最大的3的冪次
return (n >0 ) && (1162261467%n) == 0;
}
}
3 解決代碼
3和4的萬能解法代碼:
class Solution {
public boolean isPowerOfThree(int n) {
if(n == 0){
return false;
}
while(n % 3 ==0){
n = n / 3;
}
return n == 1;
}
}
class Solution {
public boolean isPowerOfFour(int num) {
if(num == 0){
return false;
}
while(num % 4 == 0){
num = num/4;
}
return num == 1;
}
}