剑指offer三十三之丑数
一、题目
如果一个数的因子中,出去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]; } }
---------------------------------------------
参考链接:
https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b