Leetcode 264 - Ugly Number II(dp)
来源:互联网 发布:java的api文档做什么的 编辑:程序博客网 时间:2024/05/29 19:36
题意
求第i个un, 定义un:质因数只包含2,3,5的数。
思路
算法1:
状态表示:
转移方程:
时间复杂度:
算法2
因为我们的UN一定只以2,3,5作为质因数,其实就是之前的某个UN*2或*3或*5后最小的那个数。
于是,我们只需要设置3个指针t2,t3,t5,例如t2代表:我们t2指向的数*2来得到下一个UN。
所以,我们可以递推出第i个UN为:
细节
中间过程会爆int,所以注意用long long
代码
//algorithm 1#define LL long longconst int maxn = 2000;LL d[maxn];class Solution {public: int nthUglyNumber(int n) { for (int i = 0; i <= n; i++) d[i] = INT_MAX; d[1] = 1, d[2] = 2, d[3] = 3, d[4] = 4, d[5] = 5; for (int i = 6; i <= n; i++) { for (int j = 2; j <= i - 1; j++) { if (d[j] * 2 > d[i - 1]) d[i] = min(d[i], d[j] * 2); if (d[j] * 3 > d[i - 1]) d[i] = min(d[i], d[j] * 3); if (d[j] * 5 > d[i - 1]) d[i] = min(d[i], d[j] * 5); } } return (int)d[n]; }};//algorithm 2class Solution {public: int nthUglyNumber(int n) { vector<long long> d(n + 1, 0); int t2 = 1, t3 = 1, t5 = 1; d[1] = 1; for (int i = 2; i <= n; i++) { d[i] = min(d[t2] * 2, min(d[t3] * 3, d[t5] * 5)); if (d[i] == d[t2] * 2) t2++; if (d[i] == d[t3] * 3) t3++; if (d[i] == d[t5] * 5) t5++; } return (int)d[n]; }};
0 0
- Leetcode 264 - Ugly Number II(dp)
- [leetcode][dp] Ugly Number II
- leetcode:数学:Ugly Number II(264)
- leetcode 264. Ugly Number II DP
- Leetcode 264(Ugly Number II)
- leetCode #264 Ugly Number II
- leetcode 264: Ugly Number II
- LeetCode(264)Ugly Number II
- [Leetcode 264] Ugly Number II
- Leetcode 264 : Ugly Number II
- leetcode 264 : Ugly Number II
- LeetCode 264: Ugly Number II
- LeetCode 264 Ugly Number II
- 【LeetCode-264】Ugly Number II
- (LeetCode 264) Ugly Number II
- LeetCode 264 Ugly Number II
- LeetCode 264: Ugly Number II
- LeetCode[264] Ugly Number II
- 【蓝桥杯】回文数字
- Android 音频播放之SoundPool的使用和封装
- Linux基础-Vim编辑器的使用整理
- js实现鼠标滚轮滚动以当前鼠标焦点为中心缩放
- spring注入配置文件属性到java类
- Leetcode 264 - Ugly Number II(dp)
- Linux一键安装web环境全攻略
- django介绍
- C#客户端接受websocket推送右下角弹出提示框出现线程错误
- Git初识
- PHP之验证码生成和使用
- maven 多模块&继承 及简单练习(五)
- 5.1编译错误, 提示kernel-3.10 is not clean, please run 'make mrproper'
- 2017年家庭年度计划