1. 程式人生 > >劍指offer三十三之醜數

劍指offer三十三之醜數

style view 包含 open span 如果 tps opened get

一、題目

  如果一個數的因子中,出去1和本身以外,質數因子只包含2、3和5,則把改數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含質數因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

註釋: 8的因子有1,2,4,8,出去1和8以後,還有因子2,4。其中質數因子只有2,因此8是醜數

14的因子有1,2,7,14,出去1和14以後,還有因子2,7。其中質數因子有2,7,而7不是2,3,5這幾個數,因此14不是醜數

二、思路

  動態規劃,對於第i個數,它一定是之前已存在數的2倍,3倍或5倍

三、代碼

技術分享
import static java.lang.Math.min;

/**
 * 動態規劃,對於第i個數,它一定是之前已存在數的2倍,3倍或5倍
 */
public class Solution {

    public int GetUglyNumber_Solution(int index) {

        if(index<=0){
            return 0;
        }

        int[] a=new int[index];

        a[0]=1;

        int index1=0;
        int index2=0;
        
int index3=0; for(int i=1;i<index;i++){ a[i]= min(a[index1]*2, min(a[index2]*3,a[index3]*5)); 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]; } }
View Code

---------------------------------------------

參考鏈接:

https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b

劍指offer三十三之醜數