leettCode_326、3的幂

前言

我先在在这里吐槽以下JavaApi的对数计算机制,差点把我整傻眼了,要想知道为啥,接着看下去叭。许久没更新我的每日一题博客了,主要是前几天中秋白天玩去了,每次做完都很晚了,但是几乎都还是打卡了

打卡界面
打卡截图

原题题目

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

题目案例

案例

題目分析

今日的题目看起来就很简单,就是判断一个数是否是三的x次方,是的很简单,但是我看进阶要求里面有一个不适用递归和循环,我一想不就用对数就可以搞定吗?可以不用循环,嗯开造!
进阶要求

代码展示

方法一:不用递归和循环

class Solution {
    public boolean isPowerOfThree(int n) {
        if( n==0){
            return false;
        }
        DecimalFormat df = new DecimalFormat("##########.0000000000000");
        double s = Math.log(n)/Math.log(3);
        s = Double.parseDouble(df.format(s));
        //System.out.println(s);
        s = s%1;
        if(s==0.000 || s==0.999){
            return true;
        }
        return false;
    }
}

本方法采用的思路,是用对数来求,看n对三取对数是否位一个整数来判断是否是三的幂,但这里很多不必要的代码,比如df对数据格式后保留几位小数,为什么s==0.999,这都是Math函数的漏洞,因为没有直接可以写log以3为底数的方法,就只能用Math.log(n)/Math.log(3)做除法,而过程中却因为,自东给我讲243= 3^(5)结果算成了4.99999,我迷路了 ,反正最后经过我的各种调试,得到了最后的运行通过,但效果差强人意。

LeetCode运行截图:
在这里插入图片描述

在这样子的条件下,我还是选择了循环的方法,又简单,又暴力

方法二:while循环

在n!=0的情况下,只要是3的倍数就继续除以3,直到不能除下去了,判断这个值是否为1,就是我方法二的思路。

public boolean isPowerOfThree(int n) {
        while (n!=0 && n%3==0){
            n/=3;
        }
        return n==1;
    }

LeetCode运行截图:
截图

ps:每日一句毒鸡汤:努力工作不一定能提前转正,但是划水一定会很轻松。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值