Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >丑数_33

丑数_33

作者头像
名字是乱打的
发布于 2021-12-23 10:23:21
发布于 2021-12-23 10:23:21
27800
代码可运行
举报
文章被收录于专栏:软件工程软件工程
运行总次数:0
代码可运行
核心思想:

丑数只能从丑数进行*2、*3、 *5 得到,那么我们仅需维护三个数组存储每个数✖️2,3,5的值即可,然后每次取最小的那个值进行数组中等待返回。

方法1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int GetUglyNumber_Solution(int index) {
        if (index<7){
            return index;
        }
        int[] res=new int[index];
        res[0]=1;
        List<Integer> l2=new LinkedList<>();
        List<Integer> l3=new LinkedList<>();
        List<Integer> l5=new LinkedList<>();
        int currIndex=1;
        while (currIndex<index){
            //上一个数的值
            int last=res[currIndex-1];
            l2.add(last*2);
            l3.add(last*3);
            l5.add(last*5);

            int tempMinValue=Math.min(l2.get(0),Math.min(l3.get(0),l5.get(0)));
            if (l2.get(0)==tempMinValue){
                res[currIndex]=l2.remove(0);
            }

            if (l3.get(0)==tempMinValue){
                res[currIndex]=l3.remove(0);
            }

            if (l5.get(0)==tempMinValue){
                res[currIndex]=l5.remove(0);
            }
            currIndex++;
        }
        return res[index-1];
    }

上面那种方法毕竟占了三个链表空间,我们这里可以简化下,我们只保存和比较3个数:用于乘2的最小的数、用于乘3的最小的数,用于乘5的最小的数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public int GetUglyNumber_Solution(int index) {
        if(index<7) return index;
        ArrayList<Integer> list=new ArrayList<Integer>();
        list.add(1);
        int i2=0,i3=0,i5=0;
        while (list.size()<index){
            int min = Math.min(Math.min(list.get(i2)*2, list.get(i3)*3), list.get(i5)*5);
            list.add(min);
            if (min==list.get(i2)*2){
                i2++;
            }
            if (min==list.get(i3)*3){
                i3++;
            }
            if (min==list.get(i5)*5){
                i5++;
            }
        }
        return list.get(list.size()-1);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/4/26 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
牛客刷题——剑指offer(第四期)
 💟💟前言 🥇作者简介:友友们大家好,我是你们的小王同学😗😗 🥈个人主页:小王同学🚗 🥉 系列专栏:牛客刷题专栏📖 📑 推荐一款非常火的面试、刷题神器👉 牛客网 今天给大家带来的刷题系列是: 剑指offer 链接:👉 剑指offer  里面有非常多的题库 跟面经知识 真的非常良心了!! JZ49 丑数🥚 jz丑数  题目描述🥚 解题思路🥚 根据题意可知 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们
王同学要努力
2022/12/21
2900
牛客刷题——剑指offer(第四期)
算法-丑数(中等)
我再提供多一些数据:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24]
OBKoro1
2020/10/27
3370
【leetcode刷题】T46-丑数 II
Write a program to find the n-th ugly number.
木又AI帮
2019/07/17
3660
剑指33-丑数
穷举,多解法 这个拿到我只能想到暴力遍历,遍历每个数,看是不是丑数,那怎么判断丑数呢: 一个数只要能被2或3或5整除,就一直除以这三个数,最后结果为1,则为丑数,不为1,则不为丑数 解法1: class Solution { //效率太低不通过 public: int GetUglyNumber_Solution(int index) { int res = 0; int i = 0; while (index) {
opencode
2022/12/26
1370
[剑指offer] 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
尾尾部落
2018/09/04
6070
剑指offer No.33 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
week
2022/11/26
1430
丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。 例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
名字是乱打的
2022/05/13
2160
剑指offer第八天
32.把数组排成最小的数 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题思路: 实际是将数组元素进行排序的操作 排序规则为,若MN组成的数字大于NM,则N在前M在后 使用Comparatpr定制排序规则 考虑到数字连接起来可能使int溢出,所以转换为使用String来操作。 import java.util.ArrayList; import java.util.Colle
10JQKA
2018/05/09
6170
【剑指Offer】49. 丑数
把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。
瑞新
2020/12/07
2830
程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。 注意,不是必须有这些素因子,而是必须不包含其他的素因子。 例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
Michael阿明
2020/07/13
4930
LeetCode 题目解答——Hard 部分
[Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复杂度上根本就不是最优解,有的写的太啰嗦,有的则用了一些过于 tricky 的方法。我没有为了这个再更新,就让它们去吧。
四火
2022/07/19
1.4K0
LeetCode 题目解答——Hard 部分
牛客网 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
2018/09/04
5030
95个可见字符生成的6位密码词典有多大?
-rw-r--r-- 1 root root 4.7T Apr 14 07:41 /data3/ccc.txt
Windows技术交流
2019/12/20
1.5K0
【leetcode刷题】T47-超级丑数
Write a program to find the nth super ugly number.
木又AI帮
2019/07/17
4090
打卡群刷题总结0922——丑数 II
链接:https://leetcode-cn.com/problems/ugly-number-ii
木又AI帮
2020/09/28
3030
C++版 - 剑指offer 面试题34:寻找丑数(Leetcode 263.Ugly number)解题报告
剑指offer 面试题34:寻找丑数 题目:把质数因子只包含2、3和5的正整数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。
Enjoy233
2019/03/05
8560
剑指Offer(三十三)-- 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
秦怀杂货店
2022/02/15
2030
剑指offer——丑数
题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
AI那点小事
2020/04/18
3670
丑数II
题意 设计一个算法,找出只含素因子2,3,5 的第 n 大的数。 符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12... 注意事项:我们可以认为 1 也是一个丑数 样例 如果n = 9, 返回 10 思路 其实改题的题意就是在所有 丑数 列表中,找到第 n 个丑数。 最简单的做法是从 1 开始,判断每一个数是否是一个丑数,是的话则加到丑数列表中,直到丑数列表的大小等于 n,但是这种方法效率较低,我们可以根据规律而尝试只创造出有效的丑数。 1*2=2 2*2=4 3*2=6 4
一份执着✘
2018/06/04
3750
ArrayList、LinkedList哪家强,据说90%人都不知道
写代码的时候很经常就会用到List集合,但是很多时候我看到童鞋们都是用ArrayList来作为实现类,很少用LinkedList,鉴于这两个集合使用频率特别高,所以老师给童靴们分析一下,他们在不同场景下面效率,谁低谁高。
林老师带你学编程
2020/07/21
2490
相关推荐
牛客刷题——剑指offer(第四期)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文