剑指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\n", 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\n", ugly[index - 1]);
76     return ugly[index - 1];
77 }
78 
79 int main()
80 {
81     getUglyNumber1(1500);
82     getUglyNumber2(1500);
83 }

优质内容筛选与推荐>>
1、BlogPublishTool - 博客发布工具
2、java提高篇(三)_四舍五入 转自 http://cmsblogs.com
3、201671010410 冯婷秀《英文文本统计分析》结对项目报告
4、管理机批量分发密钥
5、网易2017春招笔试真题编程题集合(12)——分饼干


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号