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;
}
}