Example 27
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
解题思路:在题目给定的32 位有符号整数的范围内,最大的3 的幂为 319 = 11622614673 。因此只需要判断n 是否是 319的约数即可。
除此之外,还需要特殊判断n 是负数或0 的情况。
解题步骤:
1. 判断是否n大于0(n小于等于0时,n一定不是3的幂)且11622614673能够被n整除(只有3的幂次方才能整除11622614673),并将结果返回。
示例代码如下:
public class PowerOfThree { /** * 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。 * 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x * 示例 1: * 输入:n = 27 * 输出:true * 示例 2: * 输入:n = 0 * 输出:false * 示例 3: * 输入:n = 9 * 输出:true * 示例 4: * 输入:n = 45 * 输出:false * 来源:力扣(LeetCode) * 链接:https://leetcode.cn/problems/power-of-three */ public static void main(String[] args) { PowerOfThree pot = new PowerOfThree(); System.out.println(pot.isPowerOfThree(27)); // true } /** * 官方 * * @param n * @return */ public boolean isPowerOfThree(int n) { return n > 0 && 1162261467 % n == 0; } /** * 个人 * @param n * @return */ /*public boolean isPowerOfThree(int n) { if (n <= 0) return false; while (n % 3 == 0) n = n / 3; return n == 1; }*/ }