您的位置:首页 > 职场人生

剑指offer 面试题34 丑数

2017-05-30 22:06 393 查看

剑指offer 面试题34 丑数

题目:

我们把只包含因子 2、3 和 5 的数称作为丑数(Ugly number)。求从小到大的顺序的第 1500 个丑数。

例如 6、8 都是丑数,但 14 不是,因为它包含了因子 7。习惯上,我们把 1 当做第一个丑数。

package algorithm.foroffer.top40;

/**
* Created by liyazhou on 2017/5/30.
* 面试题34:丑数
*
* 题目:
*      我们把只包含因子 2、3 和 5 的数称作为丑数(Ugly number)。求从小到大的顺序的第 1500 个丑数。
*      例如 6、8 都是丑数,但 14 不是,因为它包含了因子 7。习惯上,我们把 1 当做第一个丑数。
*
* 考查点:
*      1. 根据定义找规律(没找到 =_=)
*
* 思路:
*      1. 本办法,依次判断每一个自然数是否是丑数,当 k =1500 时明显感觉算时间较长
*
*/
public class Test34 {

public static int getKthUglyNumber(int k){
if (k < 1) return -1;
for (int number = 1; ; number++){
if (isUgly(number)) k--;
if (k == 0) return number;
}
}

private static boolean isUgly(int number){
while (number % 2 == 0) number /= 2;
while (number % 3 == 0) number /= 3;
while (number % 5 == 0) number /= 5;
return number == 1;
}

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