Leetcode326. 3的幂
题目:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
题解:
方案一:循环方式
方案二:求出int类型中可以是3的幂的最大值,然后计算最大值和要求的值能否整除,如果能整除,则为3的幂。
- int类型最大值是N=231−1N=2^{31}-1N=231−1,那么3log3N=3⌊19.56⌋=319=11622614673^{log_3{N}}=3^{ ⌊19.56⌋}=3^{19}=11622614673log3N=3⌊19.56⌋=319=1162261467
方案三: 使用数学运算公式: n=3i,i=log3n=logbnlogb3n=3^i,i=log_3{n}= \frac {log_b{n}}{log_b{3}}n=3i,i=log3n=logb3logbn
scala代码如下:
/**
* 循环
*
* @param n
* @return
*/
def isPowerOfThree(n: Int): Boolean = {
var n1 = n
while (n1 % 3 == 0) {
n1 = n1 / 3
}
n == 1
}
/**
* 找到int类型3的倍数最大的值,用这个值对n求余,看余数是否为0
* 最大值:1162261467
*
* @param n
* @return
*/
def isPowerOfThree2(n: Int): Boolean = {
n > 0 && 1162261467 % n == 0
}
/**
* 数学计算方式
*
* @param n
* @return
*/
def isPowerOfThree3(n: Int): Boolean = {
Math.round(Math.log(n) / Math.log(3)) % 1 == 0
}