LeetCode #326 Power of Three 3的幂

326 Power of Three 3的幂

Description:
Given an integer, write a function to determine if it is a power of three.

Example :

Example 1:
Input: 27
Output: true

Example 2:
Input: 0
Output: false

Example 3:
Input: 9
Output: true

Example 4:
Input: 45
Output: false

Follow up:
Could you do it without using any loop / recursion?

题目描述:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。

示例 :

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

示例 2:
输入: 0
输出: false

示例 3:
输入: 9
输出: true

示例 4:
输入: 45
输出: false

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

思路:

  1. 循环判断 n % 3 == 0, 执行 n /= 3直到 n == 1
  2. 递归, 方法同 1
  3. 注意到 3是质数, 所以 3的幂只有 3的 n次方的因数
    如 9只有 1、3、9三个因子
    int范围内最大的 3的幂为 1162261467(3 ^ 19)
    3的幂一定是该数的因子, 即 1162261467 % n = 0
    时间复杂度O(1), 空间复杂度O(1)

代码:
C++:

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

Java:

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

Python:

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return n > 0 and (1162261467 % n) == 0

你可能感兴趣的:(LeetCode #326 Power of Three 3的幂)