No.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

 

提示:

  • -231 <= n <= 231 - 1

 

进阶:

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

思路分析

这题其实很简单,不管递归与否

递归就是常规想法,一直除3,如果除得只剩下1,那么就是3的幂次,如果还剩点别的就不是。

非递归也是常规想法,幂次有一个特性,就是它的因子包含比它更小(或者相等)的3的所有幂次。所以我们只需要选出来一个可能出现的最大的3的幂次N(在32位整数条件下为1162261467),判断给入的数字是否是N的因子,如果是,那么一定是3的幂次。

Rust代码


#![allow(unused)]
fn main() {
struct Solution;
impl Solution {
    pub fn is_power_of_three(n: i32) -> bool {
        if n % 3 == 0 && n != 0 {
            Self::is_power_of_three(n / 3)
        } else {
            n == 1
        }
    }
}
}

C++代码

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