java 求解第n个丑数
2016-03-27 21:27
549 查看
题目:
我们把只包含因子2,3和5的数称为丑数(Ugly Number),求从小到大的顺序第n的丑数,例如6,8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当作第1个丑数
第一种解法:最简单粗暴野蛮也是效率最低的一种解法是:
第二种解法:空间换时间解法,假设一个数组存储好已经排序好的丑数,那么一个新的丑数的产生必定是数组里面的数乘以2,3或者乘以5,于是有了第二种解法
第二种解法:
我们把只包含因子2,3和5的数称为丑数(Ugly Number),求从小到大的顺序第n的丑数,例如6,8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当作第1个丑数
第一种解法:最简单粗暴野蛮也是效率最低的一种解法是:
public class Solution { public int GetUglyNumber_Solution(int index) { int count = 0; int i; for(i=1;count<=index;i++){ if(isUgly(i)) count++; } return i; } public boolean isUgly(int n){ while(n%3==0) n = n/3; while(n%2==0) n = n/2; while(n%5==0) n = n/5; if(n==1) return true; else return false; } }
第二种解法:空间换时间解法,假设一个数组存储好已经排序好的丑数,那么一个新的丑数的产生必定是数组里面的数乘以2,3或者乘以5,于是有了第二种解法
第二种解法:
public class Solution { public int GetUglyNumber_Solution(int index) { if(index==0) return 0; int[] a = new int[index]; int count = 1; a[0] = 1; int index2 = 0; int index3 = 0; int index5 = 0; while(count<index){ int min = min(a[index2]*2,a[index3]*3,a[index5]*5); a[count] = min; while(a[index2]*2<=a[count]) index2++; while(a[index3]*3<=a[count]) index3++; while(a[index5]*5<=a[count]) index5++; count++; } int result = a[index-1]; return result; } public int min(int a,int b,int c){ int temp = a>b?b:a; return temp>c?c:temp; } }
相关文章推荐
- Java如何获取所查询的结果集的列数,并将每条记录打印出来
- JAVA常用集合框架用法详解基础篇一之Colletion接口
- 排序
- 理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处。
- Spring动态连接Mongo(mongo读写分离,连接不同副本集)
- Java中finalize方法用途何在?
- Java反射机制探究
- 随堂笔记160322MyEclipse
- Java内存结构
- java基础
- Spring学习——(二)IOC、DI以及常用xml配置
- java设计模式之——代理模式
- Struts2自定义拦截器
- 共同学习Spring源码--ContextLoaderListener和ContextCleanupListener
- MyEclipse------缓冲流的使用
- Android中级学习笔记(三)之eclipse建完aidl文件后gen中没有生成相应的Java文件
- 理解Java虚拟机体系结构
- Java语言特点
- java虚拟机 jvm java堆 方法区 java栈
- java虚拟机 jvm java堆 方法区 java栈