丑数问题(三指针)

我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
 
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
 
思路:
我们可以知道丑数数列中每个数组都是由之前的x2,x3或者x5得到的,对于数列中每个数都有x2,x3,x5排在他们后面
这样我们每次加入的都是最小的,这样我们可以定义3个指针去;
例如一开始d2,d3,d5都指向下标为1
dp[1]=1;
dp[2]=min(dp[d2]*2,min(dp[d3]*3,dp[d5]*5));
这里因为dp[d2]*2=2最小,所有将其加入,d2++;
同时主要考虑有情况会有两个一样大的,2*3=3*2 所有我们每次都要判断一下,如果一样大,两个指针都要向后移动。
 

猜你喜欢

转载自www.cnblogs.com/Charls/p/12688886.html