这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
题目描述:
342. 4的幂 - 力扣(LeetCode) (leetcode-cn.com)
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得
示例 1:
输入:n = 16
输出:true
示例 2:
输入:n = 5
输出:false
示例 3:
输入:n = 1
输出:true
提示:
进阶:
你能不使用循环或者递归来完成本题吗?
思路分析
换底公式
在LeetCode.326 3的幂中我们已经用过换底公式解答过类似的题目。
这里再摘抄下换底公式的解析过程。
即 即
若 n 是 4 的幂,那么 一定是个整数,由换底公式可以的得到 ,只需要判断 是不是整数即可。
同理该公式可以推广到 n 的幂。
AC代码
class Solution {
fun isPowerOfThree(n: Int): Boolean {
//k的幂
val k = 4
val a = Math.round(Math.log(n.toDouble()) / Math.log(k.toDouble()))
val pow = Math.pow(k.toDouble(), a.toDouble()).toLong()
return n > 0 && pow == n.toLong()
}
}
数学法
同样在LeetCode.326 3的幂中我们用过的解题法。
即 n = 4 * 4 * 4 * ... * 4
所以 n 如果是 4 的幂 ,那么 n 一直除以 4 ,最后一定等于 1
AC代码
class Solution {
fun isPowerOfFour(n: Int): Boolean {
if (n < 1) {
return false
}
var sum=n
while(sum%4==0) {
sum/=4
}
return sum == 1
}
}
总结
2的幂,3的幂,4的幂的题目,有点方法是通用的,比如数学法,比如换底公式。
看了题解后,发现该题还有2种巧妙的解法,二进制法和取模性质法,由于一开始并没有想到该方法,暂不贴代码了,等二刷的时候再看看能不能解出来。