刷题日记 326. 3 的幂

66 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

一、题目描述:

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

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

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

 

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

示例 3:

输入:n = 9
输出:true

示例 4:

输入:n = 45
输出:false

提示:

  • -2^31 <= n <= 2^31 - 1  

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

二、思路分析:

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

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

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

三、AC 代码:

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

四、总结:

思路很简单,如果n是3的幂次方,那么会除到1,否则会除到一个小于1的数

解法挺多的,主要还是要理解其中的数学概念

范文参考

【微扰理论】童年回忆之换底公式 - 3 的幂 - 力扣(LeetCode)

【宫水三叶】一题三解 :「数学」&「倍数/约数」&「打表」 - 3 的幂 - 力扣(LeetCode)

【彤哥来刷题啦】一题三解:试除法 & 约数 & 打表! - 3 的幂 - 力扣(LeetCode)