zoukankan      html  css  js  c++  java
  • 33、剑指offer--丑数

    题目描述
    把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
     
    解题思路:本题定义三个指针,对于当前已排好序找到的最大的丑数M,记录恰乘2、乘3、乘5大于当前最大的丑数M的三个位置,然后求三个位置*2 *3 *5的最小值即为下一个丑数的值
     1 class Solution
     2 {
     3 public:
     4     int GetUglyNumber_Solution(int index)
     5     {
     6         if(index <=0 )
     7             return 0;
     8         int *pUglyNumbers = new int[index];
     9         pUglyNumbers[0] = 1;
    10         int newUglyIndex = 1;
    11  
    12         //记录恰乘2、乘3、乘5大于当前最大的丑数M的三个位置
    13         int *pMultiply2 = pUglyNumbers;
    14         int *pMultiply3 = pUglyNumbers;
    15         int *pMultiply5 = pUglyNumbers;
    16         while(newUglyIndex < index)
    17         {
    18             int min = Min(*pMultiply2*2,*pMultiply3*3,*pMultiply5*5);
    19             pUglyNumbers[newUglyIndex] = min;
    20             while(*pMultiply2*2 <= pUglyNumbers[newUglyIndex])
    21             {
    22                 ++pMultiply2;
    23             }
    24             while(*pMultiply3*3 <= pUglyNumbers[newUglyIndex])
    25             {
    26                 ++pMultiply3;
    27             }
    28             while(*pMultiply5*5 <= pUglyNumbers[newUglyIndex])
    29             {
    30                 ++pMultiply5;
    31             }
    32             ++newUglyIndex;
    33         }
    34         int ugly = pUglyNumbers[newUglyIndex-1];
    35         delete[] pUglyNumbers;
    36         return ugly;
    37     }
    38     int Min(int num1,int num2,int num3)
    39     {
    40         int min = (num1<num2)?num1:num2;
    41         min = (min<num3)?min:num3;
    42         return min;
    43     }
    44 };
  • 相关阅读:
    QTP自动化测试进阶
    疯狂Java实战演义
    软件开发之韵:和谐敏捷
    Android应用开发详解
    操作系统直接决定了计算机系统的整体性能
    iBATIS框架源码剖析
    PHP 5完全攻略
    天气地图系统
    OpenSolaris系统管理
    Asp.net MVC 3实例学习之ExtShop(三)——完成首页
  • 原文地址:https://www.cnblogs.com/qqky/p/6964764.html
Copyright © 2011-2022 走看看