leetcode-Ugly Number(丑数)
来源:互联网 发布:如何创建域名 编辑:程序博客网 时间:2024/06/05 21:39
问题描述:
我们把只包含因子2,3,5的数称为丑数。求第n个丑数。通常,把1称为第一个丑数。
问题求解:
方法一:挨个判断每个数是不是丑数,即使不是丑数也会对它求余数和除法操作。算法效率不是很高,leetcode会超时。
class Solution {public: int nthUglyNumber(int n) { if(n<=0) return 0; int cnt=0; int num=0; while(cnt<n) { if(isUgly(num)) ++cnt; ++num; } return num-1; } bool isUgly(int num) { if(num == 0) return false; while(num%2 == 0) num /= 2; while(num%3 == 0) num /= 3; while(num%5 == 0) num /= 5; return (num==1)?true:false; }};
方法二:创建数组保存已经找到的丑数,空间换时间。
根据丑数的定义,丑数(1除外)应该是另一个丑数乘以2,3或5的结果,因此我们可以创建一个数组,里边的数字是排好序的丑数,每个丑数都由前面的数字乘以2,3或5得到。
1)创建一个长度为n的数组ugly,从小到大顺序存储n个丑数,数组中的首项为1,即第一个丑数为1
2)设置三个变量idx2、idx3、idx5存储下标,初始值都为0
3)找出数组ugly[idx2]*2、ugly[idx3]*3、ugly[idx5]*5
的最小值,最小值即为下一个丑数,同时更新最小值对应的下标,如果多个数字同时为最小值,则它们的下标都要更新
直到找到第n个丑数。
class Solution {public: int nthUglyNumber(int n) { if(n<=0) return 0; vector<int> ugly(n);//(1)创建存储n个丑数的数组 ugly[0] = 1;//第一个丑数为1 //(2)下标为idx2的丑数乘以2后恰好是最开始大于数组中已有的最大丑数 //同理,下标为idx3,idx5也是这样。记录该位置,每次去更新这个下标即可 int idx2=0, idx3=0, idx5=0; int cnt=1;//记录数组中丑数下标 while(cnt < n) { //(3)找出3者最小值,即为下一个丑数 int min=minOf3(ugly[idx2]*2, ugly[idx3]*3, ugly[idx5]*5); //(4)看最小值是三者中哪一个,更新其对应下标 if(min == ugly[idx2]*2) { ++idx2; } if(min == ugly[idx3]*3) { ++idx3; } if(min == ugly[idx5]*5) { ++idx5; } ugly[cnt]=min;//(5)将下一个丑数存到数组 ++cnt;//(6)找下一个位置的丑数 } return ugly[n-1]; } int minOf3(int a, int b, int c) { int m=a<b?a:b; return m<c?m:c; }};
0 0
- Ugly Number | Leetcode 丑数
- leetcode-Ugly Number(丑数)
- leetcode 64.Ugly Number-丑数
- LeetCode 263 Ugly Number(丑数)
- Ugly Number II | Leetcode 丑数II
- 【LeetCode】263. Ugly Number 丑数判断
- leetcode 263.264.313 Ugly Number 丑数
- [leetcode]263. Ugly Number丑数
- leetcode 263. Ugly Number丑数
- ugly number(丑数)
- 丑数(Ugly Number)
- 丑数--Ugly Number
- 寻找丑数(Ugly Number)
- [C++]Ugly Number 丑数
- 263. Ugly Number 丑数
- Ugly Number(丑数)
- Ugly Number(丑数)
- LeetCode OJ 之 Ugly Number (丑数)
- Delete files or directories in bash shell
- ViewPager简单实现分析
- 为什么基于DNS的全局负载均衡(GSLB)不起作用?
- 【网络编程2】Java数据报套接字
- R语言︱线性混合模型理论与案例探究(固定效应&随机效应)
- leetcode-Ugly Number(丑数)
- 【Windows】教你一步一步在Windows 7 系统上开启Telnet服务
- Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史.
- UVa 1347 Tour
- Android学习笔记之SimpleAdapter
- orcale 忘记密码
- 在ubuntu14.04.1中将qt4.8.6移植到基于hi3520d的nvr上
- Exchange 2010 Powershell之Search-MailBox!
- 扑克牌顺子