劍指offer三十三之醜數
阿新 • • 發佈:2017-10-12
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;View Codeint 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]; } }
---------------------------------------------
參考鏈接:
https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
劍指offer三十三之醜數