算法笔记 -- 326. 3 的幂

142 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

一、题目描述:

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的值不能小于0并且n不等于0;判断为true再执行循环,循环得到3的所有次方用一个int类型来接收,得到之后再判断a是否可以模除n 或者a模n是否得到余数3;a+1%n==3,这段代码一开始我也不知道为啥要这样写,后来百度查了一下3的9次方会减1得到19682,后面运行了一遍发现不对劲,应该是19683的,然后我就加再a的基础上加1了;

三、AC 代码:

   public class Solution
{
    public bool IsPowerOfThree(int n)
    {
        return n > 0 && 1162261467 % n == 0;
    }
}

四、总结:

题目本身很简单,是整数意味着有限次数可以被整除,比较坑的是当n=0是,会进入死循环,一定要细心

还有

int范围内3的幂次方只有19个,因此可以直接枚举,效率更高

范文参考

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

用位运算解决2的幂、4的幂,用数学知识解决3的幂 - 3 的幂 - 力扣(LeetCode)

【C++】326. 3 的幂 题解:不断试除法、递归、数学 - 3 的幂 - 力扣(LeetCode)