剑指offer面试题 49. 丑数
Posted hglibin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer面试题 49. 丑数相关的知识,希望对你有一定的参考价值。
面试题 49. 丑数
题目描述
题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解答过程
样例
给出 num = 8,返回 true。
给出 num = 14,返回 false。
代码实现
1.判断一个数是否是丑数
public class Solution {
/**
* @param num: An integer
* @return: true if num is an ugly number or false
*/
public boolean isUgly(int num) {
// write your code here
boolean b = false;
if(num==1)
return true;
if(num<1)
return false;
while(num!=1){
if(num%2==0){
num=num/2;
}else if(num%3==0){
num=num/3;
}else if(num%5==0){
num=num/5;
}else{
return false;
}
}
return true;
}
}
2.设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
public class Solution {
public int GetUglyNumber_Solution(int n) {
if(n<=0)
return 0;
if(n==1)
return 1;
int[] nums = new int[n];
nums[0] = 1;
int p2 = 0,p3 = 0,p5 = 0;
for(int i=1;i<n;i++){
nums[i] = Math.min(nums[p2]*2,Math.min(nums[p3]*3,nums[p5]*5));
if(nums[i]==nums[p2]*2) p2++;
if(nums[i]==nums[p3]*3) p3++;
if(nums[i]==nums[p5]*5) p5++;
}
return nums[n-1];
}
}
以上是关于剑指offer面试题 49. 丑数的主要内容,如果未能解决你的问题,请参考以下文章