剑指offer: 丑数

题目描述:

        把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

思路:

        1是第一个丑数,后面的丑数都是前面的丑数分别与 2 ,3, 5相乘的结果。把这些丑数从小到大排列放在数组里面,最后只需要返回数组的最后一个元素就可以了。

        具体的排列: a表示存放丑数的数组,a[0] = 1,m2,m3,m5分别代表2,3,5的倍数所在的位置。刚开始都为0。循环的条件是i

对于index=5,

剑指offer: 丑数_第1张图片

m2,m3, m5分别与2,3,5相乘,比较大小

代码实现:

 public static int GetUglyNumber_Solution(int index) {
    	if(index <= 0){
    		return 0;
    	}
//    	1为第一个丑数
    	int[] a = new int[index];
    	a[0] = 1;
    	int m2 ,m3 ,m5 ,i;
    	m2 = m3 = m5 = 0;
    	i = 1;  
    	while(i

你可能感兴趣的:(剑指offer: 丑数)