您的位置:首页 > Web前端

剑指offer 34题 【时间空间效率的平衡】丑数

2016-07-23 12:53 399 查看
题目描述

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

牛客传送门:点击打开链接

思路:

用一个数组维护已经产生的丑数,每个丑数乘以2、3、5就是新生成的丑数,设最新的丑数为x;用三个指针indexTwo、indexThree、indexFive分别指向第一个2*indexTwo > x、第一个3*indexThree > x、第一个5*indexFive > x,然后将最小的数设为新的x。

public class Title34 {
public int GetUglyNumber_Solution(int index) {
if(index <= 0)
return 0;
int[] array = new int[index+1];

array[1] = 1;
int i =1,indexTwo = 1,indexThree = 1,indexFive = 1;
while(i < index){
while(array[i] >= 2*array[indexTwo])
indexTwo++;
while(array[i] >= 3*array[indexThree])
indexThree++;
while(array[i] >= 5*array[indexFive])
indexFive++;
array[++i] = Math.min(Math.min(2*array[indexTwo],3* array[indexThree]),
5*array[indexFive]);
}
return array[index];
}

public static void main(String[] args) {
Title34 clazz = new Title34();
System.out.println(clazz.GetUglyNumber_Solution(1500));// 859963392
System.out.println(clazz.GetUglyNumber_Solution(0));// 0
System.out.println(clazz.GetUglyNumber_Solution(1));// 1
System.out.println(clazz.GetUglyNumber_Solution(-20));// 0
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: