题目
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
思路
一个数如果是3的n次幂,那么它的三进制形式是1…0000.根据这个来判断
代码
//判断一个数是不是3的幂
class Solution {
public boolean isPowerOfThree(int n) {
int count= 0;
int radix=3;
//根据余数来求它的三进制形式
while (n > 0)
{
if (n%radix==1)
++count;
else if (n%radix==2)//出现2一定不是3的n次幂
return false;
n/=radix;
}
return count==1;
}
}
结果
利用一个不断除以进制求出它对应的3进制形式来排除,是一个暴力题。可以改进一下,当出现多个1的时候,就可以直接返回false了。
题解思路
找出数字 n 是否是数字 b 的幂的一个简单方法是,n%3 只要余数为 0,就一直将 n 除以 b。因此,应该可以将 n 除以 b 多 次,每次都有 0 的余数,最终结果是 1。
代码
//判断一个数是不是3的幂
class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1) {
return false;
}
while (n % 3 == 0) {
n /= 3;
}
return n == 1;
}
}
结果
总结
题解的地址,里面一些方法还是讲得不错的,不搬过来了,上面我就挑了一种最简洁的。
更加深刻了解了进制转。