力扣每日一题——263、丑数解答

力扣每日一题——263、丑数解答

263、丑数

题目链接:
丑数

在这里插入图片描述

看着本题的题目我们知道什么是丑数质因子只含有5、3、2的数,而且只需要判断传进来的数是否为丑数,这样就好办了,我们直接上代码

采用除法+取余运算

当我们传进来一个数,分别与5、3、2做除法运算,要是最终的结果等于1则表示它是丑数,这么说大家可能不太理解,我直接上代码

class Solution {
    public boolean isUgly(int n) {
        if(n < 1) return false;
        while(n % 5 == 0){
            n /= 5;
        }
        while(n % 3 == 0){
            n /= 3;
        }
        while(n % 2 == 0){
            n /= 2;
        }
        return n == 1;
    }
}

如果进来的数是11,11对5、3、2取余都不等于0吧、也就是说我丑数除1以外的正整数必须对5、3、2其中一个的取余等于0,这样就能做出来了

剑指offer 49、丑数

与上一题不同的是,传进来的n,是我们从0开始需要找到的第n个丑数,这就需要我们去记录从1开始每次找到的丑数,当找到第n个时,就是我们需要的那个数了

题目链接:

剑指offer 49、丑数

在这里插入图片描述

说到状态记录,我第一时间想到的就是动态规划,动态规划就是将每次计算的结果记录下来,以便下一次计算使用到前面计算的结果,我们直接上代码,然后讲思路

动态规划

class Solution {
    public int nthUglyNumber(int n) {
        int[] dp = new int[n];
        int a = 0,b = 0,c = 0;
        dp[0] = 1;
        for(int i = 1;i<n;i++){
            dp[i] = Math.min(dp[a] * 2,Math.min(dp[b]*3,dp[c]*5));
            //都使用if的原因是该丑数可能同时是某两个质因子的丑数
            if(dp[i] == dp[a]*2) a++;
            if(dp[i] == dp[b]*3) b++;
            if(dp[i] == dp[c]*5) c++;
        }
        return dp[n-1];
    }
}

思路:

1.首先我们定义一个数组,里面存放的就是我们找到的丑数,该dp数组的第一个数必然是1,也就是dp[0] == 1,我们还定义了三个int型数字是a、b、c,分别对应了质因子为2、3、5的丑数指针,它们的初始值对应着dp[0],也就是三者共同的丑数1

2.我们的for循环dp数组是从1开始,也就是开始找第二小的丑数

String[] chou2 = {1 * 2 , 2 * 2 , 3 * 2 , 4 * 2, 5 * 2 , 6 * 2 ,…}

String[] chou3 = {1 * 3 , 2 * 3 , 3 * 3 , 4 * 3 , 5 * 3, 6 * 3 ,…}

String[] chou5 = {1 * 5 , 2 * 5 , 3 * 5, 4 * 5 , 5 * 5 , 6 * 4 ,…}

我上面给出丑数的三个数组,我们的目的就是需要在这三个丑数数组中,从小到大的找出第n个丑数返回,这样想就简单了,每次我们都找最小的丑数就可以,然后将属于2、3、5的哪个丑数的指针++去计算下一个元素,将其记录到dp数组中即可,最后返回dp[n-1]就是我们要的结果

还有不清楚的可以直接在评论区留言我们讨论讨论

完成时间:11:48

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沉淀顶峰相见的PET

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

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

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

打赏作者

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

抵扣说明:

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

余额充值