【简单】力扣算法题解析LeetCode326:3的幂

关注底部名片达文汐,即可获得本题完整源码

题目来源:LeetCode326:3的幂

问题抽象: 给定一个整数 n(32 位有符号整数),要求判断该数是否为 3 的幂(即存在整数 k 使得 n = 3^k),满足以下核心需求:

  1. 幂次定义

    • 严格等式:需满足 n = 3^kk 为非负整数);
    • 整数范围n 为 32 位有符号整数(值域 -2^{31} ≤ n ≤ 2^{31}-1)。
  2. 输出要求

    • 返回布尔值 true(是 3 的幂)或 false(不是 3 的幂);
    • 结果需严格匹配数学定义(无近似计算)。
  3. 计算约束

    • 时间复杂度 O(1)(有限次数学运算,因 3 的最大幂次 3^{19} = 1162261467 < 2^{31});
    • 空间复杂度 O(1)(仅用常量级额外空间);
    • 禁止使用对数或浮点运算(避免精度误差)。
  4. 边界处理

    • 非正数处理n ≤ 0 时直接返回 false(3 的幂恒为正);
    • 特殊值验证
      • n = 1true3^0 = 1);
      • n = 3true
      • n = 2false
    • 最大幂次n = 11622614673^{19})→ true
    • 超出范围n > 1162261467 时必为 false(如 3^{20} > 2^{31})。

输入:整数 n
输出:布尔值(true/false


解题思路

  1. 数学性质利用
    • 在整数范围内,最大的 3 的幂次是 319 = 1162261467)(因为 320 = 3486784401已超过 231-1 = 2147483647)。
    • n 是 3 的幂,则它必须是 319 的约数(即 162261467 mod n = 0)。
  2. 边界处理
    • 3 的幂必须是正数,因此 n <= 0 时直接返回 false
  3. 高效判定
    • 结合上述两点,只需检查 n > 0 且 1162261467 mod n = 0 即可。

时间复杂度:O(1),无循环或递归。空间复杂度:O(1),仅用常量空间。


代码实现(Java版)

class Solution {
    public boolean isPowerOfThree(int n) {
        // 边界条件:3的幂必须是正数
        if (n <= 0) {
            return false;
        }
        // 数学性质:n必须整除最大3的幂(3^19=1162261467)
        return 1162261467 % n == 0;
    }
}

代码说明

  1. 边界检查n <= 0 时直接返回 false,因为 3 的幂不可能为负数或零。
  2. 核心判定:利用 (3^{19} = 1162261467) 的特性,若 n 是 3 的幂,则必能整除 (1162261467)。
  3. 高效性:避免了循环或递归,直接通过一次取模运算完成判定。

提交详情(执行用时、内存消耗)

在这里插入图片描述

我的名片👇👇👇👇👇👇👇👇👇👇👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达文汐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值