likes
comments
collection
share

LeetCode.342 4的幂

作者站长头像
站长
· 阅读数 7

题目描述:

342. 4的幂 - 力扣(LeetCode) (leetcode-cn.com)

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n==4xn == 4^xn==4x

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

 

提示:

  • −231<=n<=231−1-2^{31} <= n <= 2^{31} - 1231<=n<=2311  

进阶:

你能不使用循环或者递归来完成本题吗?

思路分析

换底公式

这里再摘抄下换底公式的解析过程。

n=4x n=4^x n=4x x= log4nx= log4 nx= log4nx=log104log10nx=\frac{log_{10} 4}{log_{10} n} x=log10nlog104

n4 的幂,那么 log4nlog_4 nlog4n 一定是个整数,由换底公式可以的得到 x=log104log10nx=\frac{log_{10} 4}{log_{10} n} x=log10nlog104,只需要判断 log4nlog_4 nlog4n 是不是整数即可。

同理该公式可以推广到 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()

    }
}

数学法

n=4xn=4^xn=4x  即 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种巧妙的解法,二进制法和取模性质法,由于一开始并没有想到该方法,暂不贴代码了,等二刷的时候再看看能不能解出来。

参考

4的幂 - 4的幂 - 力扣(LeetCode) (leetcode-cn.com)

转载自:https://juejin.cn/post/7001137207834574862
评论
请登录