zoukankan      html  css  js  c++  java
  • 剑指offer——51丑数

    题目描述

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
     
      
     1 //使用遍历判断的方法
     2 class Solution01 {
     3 public:
     4     int GetUglyNumber_Solution(int index) {
     5         if (index < 1)return 0;
     6         int cnt = 0;
     7         for (int i = 1; cnt < index; ++i)
     8         {
     9             if (isChouShu(i))
    10                 cnt++;
    11             if (cnt == index)
    12                 return i;
    13         }
    14     }
    15     bool isChouShu(int num)
    16     {
    17         while (num % 2 == 0)
    18             num /= 2;
    19         while (num % 3 == 0)
    20             num /= 3;
    21         while (num % 5 == 0)
    22             num /= 5;
    23         return num == 1;
    24     }
    25 };
    26 
    27 
    28 //使用保存数据法
    29 class Solution02 {
    30 public:
    31     int GetUglyNumber_Solution(int index) {
    32         if (index < 1)return 0;
    33         vector<int>v(index, 0);
    34         v[0] = 1;
    35         int p2, p3, p5, k = 1;
    36         p2 = p3 = p5 = 0;
    37         while (k < index)
    38         {
    39             v[k++] = min(min(v[p2] * 2, v[p3] * 3), v[p5] * 5);
    40             while (v[p2] * 2 <= v[k - 1])p2++;
    41             while (v[p3] * 3 <= v[k - 1])p3++;
    42             while (v[p5] * 5 <= v[k - 1])p5++;
    43         }
    44         return v[index - 1];
    45     }
    46 };
  • 相关阅读:
    辗转相除法
    并查集(详)
    LCA 最近公共祖先
    RMQ ST表 静态区间最大值
    manacher
    题解 CF33B String Problem
    Linux 下对拍程序
    CSP 考试注意事项
    题解 P4688 [Ynoi2016]掉进兔子洞
    CSP 2020 游记
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11700759.html
Copyright © 2011-2022 走看看