题目描述:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
提交链接:点击
思路:丑数的定义是1或者因子只有2 3 5,可推出丑数=丑数*丑数,假定丑数有序序列为:a1,a2,a3.......an 所以可以将以上序列(a1除外)可以分成3类,必定满足: 包含2的有序丑数序列:2*a1, 2*a2, 2*a3 ..... 包含3的有序丑数序列:3*a1, 3*a2, 3*a3 ..... 包含5的有序丑数序列:5*a1, 5*a2, 5*a3 ..... 以上3个序列的个数总数和为n个,而且已知a1 = 1了,将以上三个序列合并成一个有序序列即可.
代码:
class Solution { public: int GetUglyNumber_Solution(int index) { int res[index]; if(index==0) return 0; res[0]=1; int a1=0,a2=0,a3=0; for(int i=1;i<index;i++){ res[i]=min(res[a1]*2,min(res[a2]*3,res[a3]*5)); if(res[a1]*2==res[i]) a1++; if(res[a2]*3==res[i]) a2++; if(res[a3]*5==res[i]) a3++; } return res[index-1]; } };
"{:02d}".format(i) for i in range(24) :后表示填充的字符,一般为一位,默认为空格,这里指定用0填充。 将i变为两位十进制数字的字符串,不够两位用0填充 结果如下: ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23']