day2(丑数)

题目描述:

  把只包含质因子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']

非学无以广才,非志无以成学! 【Magic_chao

原文地址:https://www.cnblogs.com/logo-88/p/9627642.html