大概题意:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
这里提供一种动态规划解法,大家共同学习(本人也是学习他人的方法)。
1 class Solution { 2 public: 3 int GetUglyNumber_Solution(int index) { 4 if(index <= 0) 5 return 0; 6 if(index == 1) 7 return 1; 8 9 vector<int> DP(index); 10 DP[0] = 1; 11 int t2 = 0, t3 = 0, t5 = 0; 12 for(int i = 1; i < index; i++){ 13 DP[i] = min(DP[t2] * 2, min(DP[t3] * 3, DP[t5] * 5)); 14 if(DP[i] == DP[t2] * 2) t2++; 15 if(DP[i] == DP[t3] * 3) t3++; 16 if(DP[i] == DP[t5] * 5) t5++; 17 } 18 19 return DP[index-1]; 20 } 21 22 };