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

解法一:此解提交运行超时,不推荐。

 package com.exe11.offer;

 /**
* 【题目】把只包含因子2、3和5的数称作丑数(Ugly Number)。
* 例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
* @author WGS
*
*/
//此种方法会出现运行超时的情况、m.......................... ....... .
public class GetUglyNumber {
public boolean isUglyNumber(int number){
while(number%2==0)
number/=2;
while(number%3==0)
number/=3;
while(number%5==0)
number/=5;
return (number==1)?true:false; }
//返回第n个丑数
public int getTheUglyNumber(int n){
if(n<=0)
return 0;
int count=0;
int uglyNum=0;
while(uglyNum<n){
++count;
if(isUglyNumber(count)){
uglyNum++;
} }
return count;//第n个丑数 }
public static void main(String[] args) {
GetUglyNumber g=new GetUglyNumber();
int num=g.getTheUglyNumber(1500);
System.out.println(num); } }

解法二:

[思路]上种情况出现运行超时。此种方法是先建立一个数组,因为每个丑数是前几个丑数*2 *3 *5后的结果,所以先将其保存在数组当中,然后在数组中
* 匹配。如果出现相同,就将当前index+1.

package com.exe11.offer;

/**
* 【题目】把只包含因子2、3和5的数称作丑数(Ugly Number)。
* 例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
* [思路]上种情况出现运行超时。此种方法是先建立一个数组,因为每个丑数是前几个丑数*2 *3 *5后的结果,所以先将其保存在数组当中,然后在数组中
* 匹配。如果出现相同,就将当前index+1.
* @author WGS
*
*/
public class GetUglyNumber_Solution2 { public int getUglyNumber(int num){
if(num<=0)
return 0;
int[] uglyNumbers=new int[num];
int nextUglyNumberIndex=1;
uglyNumbers[0]=1;
int multiplyNumber2=0;
int multiplyNumber3=0;
int multiplyNumber5=0;
while(nextUglyNumberIndex<num){
int min=getMin(uglyNumbers[multiplyNumber2]*2,
uglyNumbers[multiplyNumber3]*3,
uglyNumbers[multiplyNumber5]*5);
uglyNumbers[nextUglyNumberIndex]=min;//将三者最小的丑数值依次放入数组第1.。。1500个值当中
nextUglyNumberIndex++;
if(uglyNumbers[multiplyNumber2]*2==min)//如果当前值刚好是这个丑数,就自增一
multiplyNumber2++;
if(uglyNumbers[multiplyNumber3]*3==min)
multiplyNumber3++;
if(uglyNumbers[multiplyNumber5]*5==min)
multiplyNumber5++; }
int uglyNum=uglyNumbers[nextUglyNumberIndex-1];
return uglyNum; }
private int getMin(int multiplyNumber2, int multiplyNumber3, int multiplyNumber5) {
int min=(multiplyNumber2<multiplyNumber3)?multiplyNumber2:multiplyNumber3; return (min<multiplyNumber5)?min:multiplyNumber5;
}
public static void main(String[] args) {
GetUglyNumber_Solution2 g2=new GetUglyNumber_Solution2();
int n=g2.getUglyNumber(1500);
System.out.println(n); } }

剑指offer系列59---寻找丑数的更多相关文章

  1. 剑指Offer - 九度1214 - 丑数

    剑指Offer - 九度1214 - 丑数2013-11-21 21:06 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. ...

  2. 【剑指Offer】33、丑数

      题目描述:   把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...

  3. 剑指Offer:面试题34——丑数(java实现)

    问题描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路1: ...

  4. 【剑指offer】q34:丑数

    题目要求第n个丑数.所以对于中间结果不须要保存. def Humble(index): curHum = 1 M2 = 2; M3 = 3; M5 = 5 while index > 1: cu ...

  5. 剑指offer(33)丑数

    题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目分析 ...

  6. 剑指offer三十三之丑数

    一.题目 如果一个数的因子中,出去1和本身以外,质数因子只包含2.3和5,则把改数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质数因子7. 习惯上我们把1当做是第一个 ...

  7. 剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行

    Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. A:BFS,偶数层reverse vector&l ...

  8. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  9. 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------>剑指offer系列

    题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...

随机推荐

  1. php-抽象

    //继承//子类可以继承父类的一切//特点:单继承//函数的重写 //多态//当父类引用指向子类实例,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同//如果一个方法需要一个父类 ...

  2. 大数据hadoop入门学习之集群环境搭建集合

    目录: 1.基本工作准备 1.虚拟机准备 2.java 虚拟机-jdk环境配置 3.ssh无密码登录 2.hadoop的安装与配置 3.hbase安装与配置(集成安装zookeeper) 4.zook ...

  3. HTTP详解(1)-工作原理

    出处 http://blog.csdn.net/hguisu/article/details/8680808#t0 1. HTTP简介 HTTP协议(HyperText Transfer Protoc ...

  4. 20145220《Java程序设计》实验一实验报告

    *实验一 Java开发环境的熟悉 实验内容及步骤 使用JDK编译.运行简单的Java程序 命令行下程序开发: 在命令行下建立实验目录,进入该目录后创建exp1目录 敲入以下代码: package ex ...

  5. URAL 1077 Travelling Tours(统计无向图中环的数目)

    Travelling Tours Time limit: 1.0 secondMemory limit: 64 MB There are N cities numbered from 1 to N ( ...

  6. 关于ZF2中一点感悟,service_manager

    在zf2中,在serviceLoctor中自定义的内容,可以通$serviceLocator->get('config')['key'],如果是在serivce_manger中定义的服务名,其实 ...

  7. 如何读懂 Intel HEX 文件

    什么是 Intel HEX 文件格式   转自:http://www.cnblogs.com/imapla/archive/2013/03/16/2926133.htmlIntel HEX 文件是遵循 ...

  8. how to change the AlexNet into FCNs ?

    How to change the AlexNet into FCNs ? FCNs is a network that only contain convolution layers and no ...

  9. 基于OkHttp的封装库TigerOkHttp的使用

    在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOk ...

  10. postgresql downgrade issue

    Q: Dear Support Team, If we use ubuntu server to install postgresql9.4, how can we keep original dat ...