<剑指Offer>面试题49: 丑数

题目描述

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

题目解读

  • 剑指Offer 240
  • 思路一,常规普通方式,时间太长啦
  • 思路二,书上

代码

  • 思路一,常规普通方式,时间太长啦
#include
using namespace std;

class Solution {
public:

    bool is_Ugly_Number(int number){
        bool flag = true;

        while(number%2 == 0){
            number = number/2;
        }

        while(number%3 == 0){
            number = number/3;
        }

        while(number%5 == 0){
            number = number/5;
        }

        if (number != 1){
            flag = false;
        }
        return flag;
    }

    int GetUglyNumber_Solution(int index) {
        if (index <= 0){
            return 0;
        }

        int tt = 1;
        int len = 0;
        while(len != index){
            if(is_Ugly_Number(tt)){
                len ++;
            }
            tt ++;
        }       
        return tt;
    }
};


int main()
{
    Solution ss;
    cout<
  • 思路二,书上
#include
using namespace std;

class Solution {
public:

    int Min_Number(int number1, int number2, int number3){
        
        int mi = (number1 < number2)? number1:number2;
        return (mi < number3)? mi:number3; 
    }

    int GetUglyNumber_Solution(int index) {
        if (index <= 0){
            return 0;
        }

        int *uglyNumber = new int[index];
        uglyNumber[0] = 1;

        int *p2 = uglyNumber;
        int *p3 = uglyNumber;
        int *p5 = uglyNumber;

        int next = 1; 
        while(next < index){
            int mi = Min_Number(*p2 * 2, *p3 * 3, *p5 * 5);
            uglyNumber[next] = mi;

            while(*p2 * 2 <= uglyNumber[next]){
                p2 ++;
            }

            while(*p3 * 3 <= uglyNumber[next]){
                p3 ++;
            }

            while(*p5 * 5 <= uglyNumber[next]){
                p5 ++;
            }

            next ++;
        }

        // 输出丑数
        // for (int i = 0; i < index; ++i){
        //     cout<

总结展望

  • 智慧,可以看出思路二明显比思路一快

你可能感兴趣的:(<剑指Offer>面试题49: 丑数)