丑数II

题目描述

设计一个算法,找出只含素因子2,3,5 的第 n 大的数。1也是一个丑数。

思路

  • 方法一
    每个丑数都是2..3..5..的结果
    创建保存丑数的数组a,设a[0]=1
    用index2,index3,index5表示丑数分解包含了2、3、5的个数,初始化为0
    每次求min(a[indexk]
    k),得到当前最小的丑数,写入数组,并将indexk++
    这样做即可保证a数组中能保存所有的按序排列的丑数,输出第a[n-1]个元素即可。

  • 方法二
    将1加入保存丑数的数组a,将2,3,5加入优先队列pq
    每次从pq取min,如果min与a[tmp]不等,数组保存min,并将min*2,3,5的值加入优先队列。如果相等,跳过。
    这样做,最终可以得到a[n-1]个元素即为结果

代码

 int nthUglyNumber(int n) {
        // Write your code here
        int index2 = 0;
        int index3 = 0;
        int index5 = 0;
        int[] res = new int[n];
        res[0] = 1;
        int count = 1;
        while(count < n){
            res[count] = min(res[index2]*2, res[index3]*3, res[index5]*5);
            if(res[count] == res[index2]*2) index2++;
            if(res[count] == res[index3]*3) index3++;
            if(res[count] == res[index5]*5) index5++;
            count++;
        }
        return res[--count];
    }
    private int min(int a1, int a2, int a3){
        if(a1 < a2){
            if(a1 < a3)
                return a1;
            else
                return a3;
        }else if(a2 < a3){
            return a2;
        }else{
            return a3;
        }
    }

考差点

  • 优先队列
  • 数组下标的灵活运用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8,...
    和蔼的zhxing阅读 6,754评论 0 1
  • 题目 描述 设计一个算法,找出只含素因子2,3,5 的第 n 大的数。符合条件的数如:1, 2, 3, 4, 5,...
    悠扬前奏阅读 4,481评论 0 0
  • 描述 设计一个算法,找出只含素因子2,3,5 的第 n 大的数。符合条件的数如:1, 2, 3, 4, 5, 6,...
    6默默Welsh阅读 1,684评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 01 如果,你要问我,喜欢是什么,爱是什么,那我能给你的答案就是,我也不知道。 我能知道的只有,少年时第一次喜欢的...
    青禾姑娘阅读 3,693评论 0 0

友情链接更多精彩内容