我是靠谱客的博主 听话未来,最近开发中收集的这篇文章主要介绍326. 3的幂题目官方题解大佬解法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

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

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

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

示例 3:

输入:n = 9
输出:true

示例 4:

输入:n = 45
输出:false

官方题解

方法一:循环迭代

找出数字 n 是否是数字 b 的幂的一个简单方法是,n%3 只要余数为 0,就一直将 n 除以 b。

因此,应该可以将 n 除以 b x 次,每次都有 0 的余数,最终结果是 1。

public class Solution {
    public boolean isPowerOfThree(int n) {
        if (n < 1) {
            return false;
        }

        while (n % 3 == 0) {
            n /= 3;
        }

        return n == 1;
    }
}

注意最后须要一个判断,检查 n == 1,否则 while 循环将永远不会结束。对于负数,该算法没有意义,因此我们也将包括该保护。
在这里插入图片描述

大佬解法

1.一直除以3

一种最简单的方式就是判断n是否能够被3整除,如果能够被3整除就除以3,直到不能被3整除为止,最后判断n是否等于1,代码比较简单,来看下

    public boolean isPowerOfThree(int n) {
        if (n > 1)
            while (n % 3 == 0)
                n /= 3;
        return n == 1;
    }

在这里插入图片描述

2,递归方式解决

还可以改为递归的方式,一行代码解决

    public boolean isPowerOfThree(int n) {
        return n > 0 && (n == 1 || (n % 3 == 0 && isPowerOfThree(n / 3)));
    }

在这里插入图片描述

3,算术表达式计算

    public boolean isPowerOfThree(int n) {
        return (Math.log10(n) / Math.log10(3)) % 1 == 0;
    }

在这里插入图片描述

4,解法4

题中n的范围是-2^31 <= n <= 2^31 - 1,而在这个范围内3的最大幂是1162261467,在比他大就超过int表示的范围了,我们直接用它对n求余即可,过求余的结果是0,说明n是3的幂次方

    public boolean isPowerOfThree(int n) {
        return (n > 0 && 1162261467 % n == 0);
    }

在这里插入图片描述

最后

以上就是听话未来为你收集整理的326. 3的幂题目官方题解大佬解法的全部内容,希望文章能够帮你解决326. 3的幂题目官方题解大佬解法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部