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

原文地址:https://www.cnblogs.com/zzw1024/p/11700759.html

时间: 2024-07-30 15:16:25

剑指offer——51丑数的相关文章

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

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