LeetCode——326. 3的幂(Java)

题目描述

题干:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

示例1:
输入:n = 27
输出:true

示例2:
输入:n = 45
输出:false

题解思路

判断是不是3的幂,一开始的思路就是循环判断,复杂度也不算太高,有一种理解是基于这种简单的方法,就是3进制的引入

如果是3进制的数,那么这个数字转换为10进制那么一定是10000……00,所以只要判断转换后最后一个数字是不是1即可这也就和最简单的写法不谋而合

在我看来会有人枚举解答的时候,有个方法确实眼前一亮,根据输入的参数是int,得到int的取值范围得到最大的3的幂是3的19次方

而且如果数字是3的幂的话,一定会是3的19次方的余数,这里就出现了最简单的写法

正确代码

    //3进制
    public boolean isPowerOfThree1(int n) {
        int count = 0;
        while (n >= 1) {
            count += n % 3;
            n /= 3;
        }
        return (count == 1) ? true : false;
    }

    //简单循环法
    public boolean isPowerOfThree2(int n) {
        if (n < 1) {
            return false;
        }
        while (n % 3 == 0) {
            n /= 3;
        }
        return n == 1;
    }

    //余数判断法
    public static boolean isPowerOfThree3(int n) {
        //2的19次方为1162261467
        return n > 0 && 1162261467 % n == 0;
    }

总结

这道题因为int的缘故范围不大,如果用传统方法操作更大的数字的话那就性能太低了,官方题解还有其他的数学方法可以提供参考

终究是有些方法不太明白搞懂,如果你想得到更高效的办法建议去阅读

如果文章存在问题或者有更好的题解,欢迎评论区斧正和评论,各自努力,你我最高处见
posted @ 2021-03-30 10:34  21岁还不是架构师  阅读(85)  评论(0编辑  收藏  举报