zoukankan      html  css  js  c++  java
  • [剑指Offer] 33.丑数

    题目描述

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

    【思路1】递归,超时。。很明显在算到后面的时候每一个数都要算很长时间

     1 bool Is_Ugly_Num(int num)
     2 {
     3     if(num == 1)
     4         return true;
     5     else if(num % 2 == 0)
     6         return Is_Ugly_Num(num/2);
     7     else if(num % 3 == 0)
     8         return Is_Ugly_Num(num/3);
     9     else if(num % 5 == 0)
    10         return Is_Ugly_Num(num/5);
    11     else
    12         return false;
    13 
    14 }
    15 int GetUglyNumber_Solution(int index)
    16 {
    17     vector<int> res;
    18     int num = 1;
    19     while(res.size() < index)
    20     {
    21         if(Is_Ugly_Num(num))
    22             res.push_back(num);
    23         num ++;
    24     }
    25     return res[index - 1];
    26 }

    【思路2】别人家的代码就是好。。。每一个丑数都是前面的丑数乘2、乘3、乘5得来

     1 class Solution
     2 {
     3 public:
     4     int GetUglyNumber_Solution(int index)
     5     {
     6         if(index < 7)  return index;
     7         vector<int> res(index);
     8         res[0] = 1;
     9         int t2 = 0,t3 = 0,t5 = 0;
    10         for(int i = 1; i < index; i ++)
    11         {
    12             res[i] = min(res[t2]*2,min(res[t3]*3,res[t5]*5));
    13             if(res[i] == res[t2]*2) t2++;
    14             if(res[i] == res[t3]*3) t3++;
    15             if(res[i] == res[t5]*5) t5++;
    16         }
    17         return res[index - 1];
    18     }
    19 };
  • 相关阅读:
    0127 date dateformat calebdar
    0126 字符串缓冲区StringBuffer类 正则表达式
    0126 String类
    0125 java API object
    0125 匿名对象 内部类 包 代码块
    0123 final关键字,static 关键字
    0123 this关键字 super关键字
    0122面向对象 构造方法
    0122面向对象3 多态
    0120 面向对象2
  • 原文地址:https://www.cnblogs.com/lca1826/p/6511669.html
Copyright © 2011-2022 走看看