剑指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
}
}
把只包含因子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
}
}
相关文章推荐
- JSP基础知识及工程创建
- H5学习之4 拖拽元素 放置元素2
- 用Jplayer做的一个带动画的播放器
- ButterKnife的常用方法
- fedora23_x86_64通过dnf升级到fedora24
- Angular2 开发规范
- CSS样式设置小技巧
- js中this的用法
- caffe 训练imagenet
- JSP技术(一)
- js中数组的用法
- js注意事项03
- AngularJS中的表单验证机制
- js注意事项02
- 未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0
- 前端 时间个性化 插件 jquery.timeago.js
- js注意事项01
- caffe + anaconda2 重新编译后出现问题
- JavaScript中的事件
- JavaScript事件使用指南