算法(TS):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

提示:

  • -231 <= n <= 231 - 1

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


解法一

判断 Math.pow(3,i) 是否等于 n ,i 从 0 递增到 i 的平方根。

typescript 复制代码
function isPowerOfThree(n: number): boolean {
    let result = false
    let i = 0
    const k = Math.sqrt(n)
    while(i < k) {
        if(Math.pow(3,i) === n) {
            return true
        }
        i++
    }
    return result
};

解法二

不断地将 n 除以 3,直到 n=1,如果在这个过程中遇到除不尽的情况,则说明 n 不是 3 的幂。

kotlin 复制代码
function isPowerOfThree(n: number): boolean {
    if(n<=0) return false
    while(n > 1) {
        if (n % 3 !== 0) {
            return false
        }

        n /=3
    }

    return true
};

解法三

在题目给定的 32 位有符号整数的范围内,最大的 3 的幂为 3^19 = 1162261467 。我们只需要判断 n 是否是 1162261467 的约数即可。

typescript 复制代码
function isPowerOfThree(n: number): boolean {
    return n > 0 && 1162261467 % n===0
};
相关推荐
tang&5 分钟前
双指针算法:化繁为简的优雅解法
数据结构·c++·算法
Aaron158810 分钟前
RFSOC+VU13P在无线信道模拟中的技术应用分析
数据结构·人工智能·算法·fpga开发·硬件架构·硬件工程·射频工程
咸鱼加辣18 分钟前
“刻意强调” O(1)
数据结构·算法
南烟斋..22 分钟前
Linux进程管理完全指南:创建、终止、回收与替换
linux·算法
JQ_Zhang32 分钟前
极致体验!一个小工具实现智能关键词高亮 (中英文混排/全字匹配)
typescript
点我头像干啥32 分钟前
机器学习算法之动量法:优化梯度下降的“惯性”策略
人工智能·神经网络·算法·机器学习
XFF不秃头40 分钟前
力扣刷题笔记-下一个排列
c++·笔记·算法·leetcode
Lv117700841 分钟前
Visual Studio中Array数组的常用查询方法
笔记·算法·c#·visual studio
hn小菜鸡1 小时前
LeetCode 1306.跳跃游戏III
算法·leetcode·游戏
Swift社区1 小时前
LeetCode 450 - 删除二叉搜索树中的节点
算法·leetcode·职场和发展