326. Power of Three

题目描述和难度

  • 题目描述:

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

示例 1:

输入: 27
输出: true

示例 2:

输入: 0
输出: false

示例 3:

输入: 9
输出: true

示例 4:

输入: 45
输出: false

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

思路分析

求解关键:解法还蛮多的,下面给出几个比较好理解的。

1、打表法,把所有可能的结果都列出来,放入哈希表中判断;
2、

参考解答

参考解答1

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class Solution {

    // 打表法
    public boolean isPowerOfThree(int n) {
        int[] nums = new int[]{1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467};
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        return set.contains(n);
    }

    public static void main(String[] args) {
        List<Integer> res = new ArrayList<>();
        int n = 1;
        System.out.println(Integer.MAX_VALUE);
        while (n > 0 && n < 2147483647) {
            res.add(n);
            n = n * 3;
        }
        System.out.println(res);
    }
}

参考解答2

public class Solution2 {

    /**
     * 因为 3 是质数,用 3 的方幂的最大值去整除这个待检测的数即可
     *
     * @param n
     * @return
     */
    public boolean isPowerOfThree(int n) {
        return n > 0 && 1162261467 % n == 0;
    }
}

参考解答3

public class Solution3 {

    /**
     * 转换成一个 3 进制的数,它的字符串表示一定是以 1 开头,后面全部是 0
     *
     * @param n
     * @return
     */
    public boolean isPowerOfThree(int n) {
        return n > 0 && Integer.toString(n, 3).matches("^10*$");
    }

    public static void main(String[] args) {
        int num = 27;
        System.out.println(Integer.toString(num, 3));
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0326-power-of-three ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com