返回轨道
算法 · 2026-05-14 · 19 阅读

P189 3 的幂

算法 19 阅读

信号摘要

难度:Easy · 时长:06:28 · leetcode 326 · lintcode 1294

P189 3 的幂

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个整数 n,你要写一个函数来判断它是否为 3 的幂。

比如说,给你的 n 等于 9,则返回 true:

n = 9 = 3^2 => true

再比如说,给你的 n 等于 8,则返回 false:

n = 8 => false

代码

public class AlgoCasts {

  // Time: O(log_3(n)), Space: O(1)
  public boolean isPowerOfThreeBruteForce(int n) {
    if (n <= 0) return false;
    while (n % 3 == 0)
      n /= 3;
    return n == 1;
  }

  private final int MAX_POWER = (int) (Math.log(Integer.MAX_VALUE) / Math.log(3));
  private final int MAX_NUM = (int) Math.pow(3, MAX_POWER);

  // Time: O(1), Space: O(1)
  public boolean isPowerOfThreeMath(int n) {
    return n > 0 && (MAX_NUM % n) == 0;
  }

  // 32 位整型变量可以表示的所有的 3 的幂
  private final Set<Integer> set = new HashSet<>(
    Arrays.asList(
      1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441,
      1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467
    )
  );

  // Time: O(1), Space: O(1)
  public boolean isPowerOfThreeHashSet(int n) {
    return set.contains(n);
  }

}

📡 通讯频道