LeetCode 264. Ugly Number II(丑数字)
来源:互联网 发布:centos gcc 升级 编辑:程序博客网 时间:2024/04/30 13:42
原题网址:https://leetcode.com/problems/ugly-number-ii/
Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
思路:动态规划。因数2、3、5可以分别乘以前面的数字,找出最小的一个作为下一个。
public class Solution { public int nthUglyNumber(int n) { if (n<=1) return 1; int[] nums = new int[n]; nums[0] = 1; int f2 = 0, f3 = 0, f5 = 0; for(int i=1; i<n; i++) { int m2 = nums[f2] * 2; int m3 = nums[f3] * 3; int m5 = nums[f5] * 5; if (m2 <= m3 && m2 <= m5) { nums[i] = m2; f2 ++; } else if (m3 <= m2 && m3 <= m5) { nums[i] = m3; f3 ++; } else { nums[i] = m5; f5 ++; } if (nums[i] == nums[i-1]) i --; } return nums[n-1]; }}
可以进一步优化得更简洁:
public class Solution { public int nthUglyNumber(int n) { if (n <= 1) return 1; int[] nums = new int[n]; int size = 0; nums[size++] = 1; int p2 = 0, p3 = 0, p5 = 0; for(int i=2; i<=n; i++) { int m2 = nums[p2] * 2; int m3 = nums[p3] * 3; int m5 = nums[p5] * 5; int m = m2; if (m3 < m) m = m3; if (m5 < m) m = m5; nums[size++] = m; if (m2 == m) p2 ++; if (m3 == m) p3 ++; if (m5 == m) p5 ++; } return nums[size-1]; }}
另一种实现:
public class Solution { public int nthUglyNumber(int n) { if (n<=0) return 0; int[] factor = {2, 3, 5}; int[] pos = new int[3]; int[] nums = new int[n]; nums[0] = 1; for(int i=1; i<n; i++) { int min = 0; if (nums[pos[1]] * factor[1] < nums[pos[min]] * factor[min]) min = 1; if (nums[pos[2]] * factor[2] < nums[pos[min]] * factor[min]) min = 2; nums[i] = factor[min] * nums[pos[min]++]; if (nums[i] == nums[i-1]) i--; } return nums[n-1]; }}
0 0
- LeetCode 264. Ugly Number II(丑数字)
- LeetCode 263. Ugly Number(丑数字)
- (LeetCode) Ugly Number --- 丑数字
- Ugly Number II | Leetcode 丑数II
- leetcode 264. Ugly Number II-丑数|动态规划
- LeetCode OJ 之 Ugly Number II (丑数-二)
- LeetCode 313. Super Ugly Number(超级丑的数字)
- 264. Ugly Number II&丑数
- LeetCode 263 Ugly Number(丑数)
- LeetCode (39) Ugly Number I II (丑数)
- LeetCode Ugly Number II(丑数的计算)
- LeetCode-263.264. Ugly Number II (JAVA)丑数
- [leetcode] 264.Ugly Number II
- 264. Ugly Number II LeetCode
- leetcode 264. Ugly Number II
- [leetcode] 264. Ugly Number II
- leetcode.264. Ugly Number II
- LeetCode 264. Ugly Number II
- Android PullToRefresh 长按点击删除
- 算法1.1 最大公约数(欧几里得)&判定素数&计算平方根(牛顿迭代法)
- 栈区与堆区
- C++之构造器和析构器
- Ubuntu Server 安装 FTP 服务 和 SSH 服务
- LeetCode 264. Ugly Number II(丑数字)
- laravel小知识
- swift学习笔记之基本数据类型-控制流
- linux上ln命令详细说明
- Hadoop学习(二) — Hadoop2.4伪分布式的安装与测试
- Android Timer,TimerTask简单的使用
- cocos2d-x-3.10的Hello Cocos2d
- jquery怎么跳出当前的each循环
- Linux下redis的安装