zoukankan      html  css  js  c++  java
  • 剑指Offer32 丑数

     1 /*************************************************************************
     2     > File Name: 32_UglyNumber.c
     3     > Author: Juntaran
     4     > Mail: JuntaranMail@gmail.com
     5     > Created Time: 2016年09月02日 星期五 12时29分59秒
     6  ************************************************************************/
     7 
     8 #include <stdio.h>
     9 #include <malloc.h>
    10 
    11 int isUgly(int number)
    12 {
    13     while (number % 2 == 0)
    14         number /= 2;
    15     while (number % 3 == 0)
    16         number /= 3;
    17     while (number % 5 == 0)
    18         number /= 5;
    19     
    20     return (number==1) ? 0 : -1;
    21 }
    22 
    23 // 低效方法
    24 int getUglyNumber1(int n)
    25 {
    26     if (n <= 0)
    27         return -1;
    28     
    29     int number = 0;
    30     while (n != 0)
    31     {
    32         ++ number;
    33         if (isUgly(number) == 0)
    34             n --; 
    35     }
    36     printf("%d
    ", number);
    37     return number;
    38 }
    39 
    40 int MinOfThree(int a, int b, int c)
    41 {
    42     int minNum = a>b ? b : a;
    43     minNum = minNum>c ? c : minNum;
    44     return minNum;
    45 }
    46 
    47 // 高效方法 空间换时间
    48 int getUglyNumber2(int index)
    49 {
    50     if (index <= 1)
    51         return index;
    52     
    53     int* ugly = (int*)malloc(sizeof(int) * index);
    54     int i2 = 0;
    55     int i3 = 0;
    56     int i5 = 0;
    57     ugly[0] = 1;
    58     
    59     for (int i = 1; i < index; ++i)
    60     {
    61         int temp2 = ugly[i2] * 2;
    62         int temp3 = ugly[i3] * 3;
    63         int temp5 = ugly[i5] * 5;
    64         
    65         int minNum = MinOfThree(temp2, temp3, temp5);
    66         ugly[i] = minNum;
    67         
    68         if (minNum == temp2)
    69             i2 ++;
    70         if (minNum == temp3)
    71             i3 ++;
    72         if (minNum == temp5)
    73             i5 ++;
    74     }
    75     printf("%d
    ", ugly[index - 1]);
    76     return ugly[index - 1];
    77 }
    78 
    79 int main()
    80 {
    81     getUglyNumber1(1500);
    82     getUglyNumber2(1500);
    83 }
  • 相关阅读:
    mysql uodate 报错 You can't specify target table '**' for update in FROM clause
    设置mysql InnoDB存储引擎下取消自动提交事务
    SQL插入数据--数据中的某一列来自本表中的数据
    服务器部署静态页面
    json 和 jsonp
    Git 回滚
    java 自定义注解
    java BlockingQueque的多种实现
    java 多线程之ReentrantLock与condition
    storm 架构原理
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5835661.html
Copyright © 2011-2022 走看看