LeetCode——326.3的幂

题目

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

思路

一个数如果是3的n次幂,那么它的三进制形式是1…0000.根据这个来判断

代码

//判断一个数是不是3的幂
class Solution {
    public boolean isPowerOfThree(int n) {
        int count= 0;
        int radix=3;
        //根据余数来求它的三进制形式
        while (n > 0)
        {
            if (n%radix==1)
                ++count;
            else if (n%radix==2)//出现2一定不是3的n次幂
                return false;
            n/=radix;
        }
        return count==1;
    }
}

结果

在这里插入图片描述
利用一个不断除以进制求出它对应的3进制形式来排除,是一个暴力题。可以改进一下,当出现多个1的时候,就可以直接返回false了。

题解思路

找出数字 n 是否是数字 b 的幂的一个简单方法是,n%3 只要余数为 0,就一直将 n 除以 b。因此,应该可以将 n 除以 b 多 次,每次都有 0 的余数,最终结果是 1。

代码

//判断一个数是不是3的幂
class Solution {
    public boolean isPowerOfThree(int n) {
        if (n < 1) {
            return false;
        }

        while (n % 3 == 0) {
            n /= 3;
        }
        return n == 1;
    }
}

结果

在这里插入图片描述

总结

题解的地址,里面一些方法还是讲得不错的,不搬过来了,上面我就挑了一种最简洁的。
更加深刻了解了进制转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值