zoukankan      html  css  js  c++  java
  • 丑数(剑指offer-33)

    题目描述

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    题目解析

    动态规划求解,维护一个之前求解的丑数的数组,下一个丑数由之前的某个丑数推导出来
    每个下一个丑数,必然是历史丑数乘以2、3、或5得到的
    暂取下一个丑数为当前丑数乘以2、3、或5得到的三个数中的最小值
    为保证丑数递增,则需要分别维护2、3、5对应的一组历史丑数,小于当前丑数,对应的历史丑数的索引
    下一个丑数即为三个数字维护的历史丑数 乘以 自身获取的三个数字中的最小数

    题目解答

    public class Solution {
        public int GetUglyNumber_Solution(int index) {
            if(index<=6) return index;
            int[] a = new int[index];// 暂存丑数
            a[0] = 1;//初始化第一个丑数
            int index1 = 0;//遍历丑数*2的队列
            int index2 = 0;//遍历丑数*3的队列
            int index3 = 0;//遍历丑数*5的队列
            
            for(int i=1;i<index;i++){
                a[i] = Math.min(Math.min(a[index1]*2,a[index2]*3),a[index3]*5);
                // 根据放在第i个位置上的数字更新遍历三个队列的下标
                if(a[i] == a[index1]*2) index1++;
                if(a[i] == a[index2]*3) index2++;
                if(a[i] == a[index3]*5) index3++;
            }
            return a[index-1];
        }
    }
    
  • 相关阅读:
    Oracle数据库死锁和MySQL死锁构造和比较
    shell单引号中输出参数值
    视频流媒体服务器
    使用syncthing进行双机文件同步
    状态(State)模式--设计模式
    中介者(调停者)模式--设计模式
    链表的中间节点
    删除链表中的倒数第N个节点
    Logos讲解--逆向开发
    MonkeyDev安装--逆向开发
  • 原文地址:https://www.cnblogs.com/yzhengy/p/13264865.html
Copyright © 2011-2022 走看看