Ugly Number II

原创 2016年05月30日 21:38:12
  • 题目:Write a program to find the n-th ugly number. Ugly numbers are
    positive numbers whose prime factors only include 2, 3, 5. For
    example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first
    10 ugly numbers. Note that 1 is typically treated as an ugly number.
    解题思路:
    1.若利用回调函数一次计算每个丑数,最后输出第n个丑数,那么会出现“计算时间超出”的错误,相对而言,丑数的数目更小,所以集中分析丑数的计算;
    2.一个丑数必然是2,3或5的倍数(1除外);
    3.关键是如何保证丑数次序,无遗漏地列举所有丑数;采用三个丑数合并的方式一次求解每组丑数,每组较大的丑数[L1,L2,L3]都是由较小的丑数的2倍,3倍或者5倍求出;(Assume you have Uk, the kth ugly number. Then Uk+1 must be Min(L1 * 2, L2 * 3, L3 * 5).)
    JAVA解调思路:
public class Solution {
    public int nthUglyNumber(int n) {
        if(n==1)
        {
            return 1;
        }
        int[] uglyNumber=new int[n];//用于保存ugly Number的数组
        int[] index={0,0,0};     //保存L1,L2,L3的值
        int[] tempNum={2,3,5};  //保存2*L1,3*L2,5*L3的值
        int   tempIndex=0;  //uglyNumber数组的下标值
        int   sortIndex=0;  //保存带插入的index值
        int   min=0;   
        //变量初始化
        uglyNumber[0]=1;
        while(tempIndex<(n-1))
        {
             tempIndex++;
             min=minUglyNumber(tempNum);//取得最小数字的index
             uglyNumber[tempIndex]=min;//将最小的数添加至uglyNumber数组
            //修改下标数组对应值,此处注意此处相同的值下标要一起增加
            if(tempNum[0]==min)
            {
                index[0]++;
                tempNum[0]=2*uglyNumber[index[0]];

            }
            if(tempNum[1]==min)
            {
                 index[1]++;
                tempNum[1]=3*uglyNumber[index[1]];
            }
            if(tempNum[2]==min)
            {
                 index[2]++;
                tempNum[2]=5*uglyNumber[index[2]];
            }
        }
        return min;
    }
    public int minUglyNumber(int[] num)
    {
        int temp=num[0]<num[1]?num[0]:num[1];
        return temp<num[2]?temp:num[2];
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

[Leetcode 264] Ugly Number II

Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime facto...
  • sbitswc
  • sbitswc
  • 2015年09月02日 00:23
  • 2229

leetcode笔记:Ugly Number II

从1开始的丑数为:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … 该题的大意是,输入一个正整数n,返回第n个丑数。...
  • liyuefeilong
  • liyuefeilong
  • 2016年01月10日 18:42
  • 1557

Ugly Number II(求第N个丑数)

这个应该是微软的一道面试题,首先需要明白丑数的概念。1是一个特殊的丑数,其次只含有2,3,5质因数的数被定义为丑数。 关于解题的思路可以参考: http://www.geeksforgeeks.o...
  • guang09080908
  • guang09080908
  • 2015年08月19日 14:49
  • 5409

[leetcode] 264. Ugly Number II 解题报告

题目链接:https://leetcode.com/problems/ugly-number-ii/ Write a program to find the n-th ugly number. ...
  • qq508618087
  • qq508618087
  • 2015年12月13日 15:54
  • 522

[leetcode-264]Ugly Number II(java)

问题描述: Write a program to find the n-th ugly number.Ugly numbers are positive numbers whose prime fa...
  • zdavb
  • zdavb
  • 2015年08月24日 11:12
  • 1144

**[Lintcode]Ugly Number II 丑数 II

Ugly number is a number that only have factors 2, 3 and 5. Design an algorithm to find the nth ug...
  • jc69186918
  • jc69186918
  • 2016年12月04日 17:27
  • 305

丑数Ugly Number查找算法

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数 下面是一...
  • houzengjiang
  • houzengjiang
  • 2012年09月03日 23:50
  • 8120

LeetCode: Ugly Number II

题目链接:https://leetcode.com/problems/ugly-number-ii/ 题目: Write a program to find the n-th ugly num...
  • yangyao_iphone
  • yangyao_iphone
  • 2015年08月19日 16:04
  • 729

[C++]Ugly Number II丑数2

leetcode 原题链接:https://leetcode.com/problems/ugly-number-ii/ Write a program to find the n-th ugly ...
  • lyy_hit
  • lyy_hit
  • 2015年08月19日 15:51
  • 1024

leetcode 264: Ugly Number II

Ugly Number II Total Accepted: 2920 Total Submissions: 15174 Write a program to find the...
  • xudli
  • xudli
  • 2015年08月23日 10:53
  • 5267
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ugly Number II
举报原因:
原因补充:

(最多只允许输入30个字)