剑指offer 34_丑数

丑数:只有2 3 5 这三个因子的数,求前(第)1500个。习惯上我们把1当作第一个丑数

例如 6, 8是丑数。14不是。

#include <stdio.h>

int Min(int x,int y, int z){
        int min = (x <= y) ? x : y;
        return min = (z <= min) ? z : min;
}

int GetUglyNumber(int index){
    if(index <= 0){
        return 0;
    }

    int* uglyNumbers= new int[index];
    int uglyCount = 1;
    uglyNumbers[0] = 1;

    int* ugly2 = uglyNumbers;
    int* ugly3 = uglyNumbers;
    int* ugly5 = uglyNumbers;

    for(; uglyCount< index; ++uglyCount){
        int min = Min((*ugly2)*2,(*ugly3)*3,(*ugly5)*5);
        uglyNumbers[uglyCount] = min;

        while((*ugly2)*2 <= min){
            ++ugly2;
        }
        while((*ugly3)*3 <= min){
            ++ugly3;
        }
        while((*ugly5)*5 <= min){
            ++ugly5;
        }
    }

    for(int i=0; i<index; i++){
        printf("%d\n",uglyNumbers[i]);
    }

    delete[] uglyNumbers;
}

int main(){
    int index = 1500;
    GetUglyNumber(index);
    return 0;
}

gcc uglyNumber.cpp

1
2
3
4
5
6
8
9
10
12
15
16
18
20
24
25
27
30
32
36

.

.

.

786432000
787320000
791015625
796262400
797161500
800000000
805306368
806215680
810000000
816293376
819200000
820125000
829440000
838860800
839808000
843750000
849346560
850305600
854296875
859963392

第1500个为 859963392

时间: 2024-10-03 21:53:41

剑指offer 34_丑数的相关文章

剑指OFFER之丑数(九度OJ1214)

题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据,输出第N个丑数. 样例输入: 3 样例输出: 3 解题思路: 最简单的思路是,从1到大数,每个数都检测一遍是否是丑数,检测方法可以考虑 int ugly(int number){ if(number%2 == 0

剑指offer (34) 丑数

题目:只包含因子2,3,5的数成为 丑数 求从小到大第1500个丑数 通常我们把1当作第一个丑数 方法一:逐个判断每个整数是不是丑数 如何判断一个数是不是丑数? 根据定义,丑数只能被2,3,5整除,也就是说,这个数的因子中只能是2,3,5 我们不断用这个数除以2,3,5,直到最后,如果得到1,那么这个数就是丑数 bool IsUgly(int num) { assert(num >= 0); while (num % 2 == 0) { num /= 2; } while (num % 3 ==

【剑指Offer】丑数

问题描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 算法分析 每个位置上的丑数都是某个丑数乘上2或3或5的结果,看如下示例: 第1个丑数是 1, 第2个丑数是 1 * 2 = 2, 第1个丑数*2 第3个丑数是 1 * 3 = 3, 第1个丑数*3 第4个丑数是 2 * 2 = 4, 第2个丑数*2 第5个丑数是 1 * 5 = 5, 第1个丑数*5 第6个丑

《剑指offer》丑数

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不

剑指OFFER之丑数

题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据,输出第N个丑数. 样例输入: 3 样例输出: 3 Code: #include <iostream> using namespace std; int minVal(int a,int b,int c

《剑指offer》---丑数

本文算法使用python3实现 1. 问题1 1.1 题目描述: ??把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数. ??时间限制:1s:空间限制:32768K 1.2 思路描述: ??大致思路:将该数依次除以 $ 2,3,5 $ ,若最后商为 $ 1 $ 则是丑数,否则,不是丑数. 1.3 程序代码: class Solution: def isUgly(self, num): '''判断num是否是丑数''' if num <= 0: return Fa

[剑指offer] 33. 丑数

题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数.  leetcode原题,题解链接 class Solution { public: int GetUglyNumber_Solution(int index) { if (index < 7) return index; vector<int> res(index); res[0] = 1; in

剑指offer:丑数

题目描述把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. # -*- coding: utf-8 -*- # @Time : 2019-07-11 23:24 # @Author : Jayce Wong # @ProjectName : job # @FileName : getUglyNumber.py # @Blog : https://blog.51cto

剑指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 <