码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】面试题 49. 丑数

时间:2018-05-12 23:06:11      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:str   number   min   false   pre   ret   个数   ...   习惯   

面试题 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. 丑数

标签:str   number   min   false   pre   ret   个数   ...   习惯   

原文地址:https://www.cnblogs.com/hglibin/p/9030315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!