264. 丑数 II-动态规划-(263. 丑数)
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了264. 丑数 II-动态规划-(263. 丑数)相关的知识,希望对你有一定的参考价值。
一、题目描述
给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
示例 1:
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
示例 2:
输入:n = 1
输出:1
解释:1 通常被视为丑数。
二、解题
动态规划
dp[i] 表示第 i 个丑数,第 n 个丑数即为dp[n]。
最小的丑数是 1,因此 dp[1]=1;
定义三个指针 p2,p3,p5,表示下一个丑数是当前指针指向的丑数乘以对应的质因数。初始时,三个指针的值都是 1。
- dp[i] = min(dp[p2]*2,dp[p3]*3,dp[p5]*5)
- 其次比较dp[i] 和 dp[p2]*2、dp[p3]*3、 dp[p5]*5是否相等,相等则将对应的指针+1;
class Solution
public int nthUglyNumber(int n)
int[] dp = new int[n + 1];
dp[1] = 1;
int p2 = 1, p3 = 1, p5 = 1;
for (int i = 2; i <= n; i++)
int num2 = dp[p2] * 2, num3 = dp[p3] * 3, num5 = dp[p5] * 5;
dp[i] = Math.min(Math.min(num2, num3), num5);
if (dp[i] == num2)
p2++;
if (dp[i] == num3)
p3++;
if (dp[i] == num5)
p5++;
return dp[n];
时间复杂度:O(n);
空间复杂度:O(n)。
263. 丑数
一、题目描述
丑数 就是只包含质因数 2、3 和 5 的正整数。
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
示例 1:
输入:n = 6
输出:true
解释:6 = 2 × 3
示例 2:
输入:n = 1
输出:true
解释:1 没有质因数,因此它的全部质因数是 2, 3, 5 的空集。习惯上将其视作第一个丑数。
示例 3:
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。
二、解题
数学
class Solution
public boolean isUgly(int n)
if(n <= 0)
return false;
int[] factors = new int[]2,3,5;
for(int factor : factors)
while(n % factor == 0)
n /= factor;
return n==1;
时间复杂度:O(logn);
空间复杂度:O(1)。
以上是关于264. 丑数 II-动态规划-(263. 丑数)的主要内容,如果未能解决你的问题,请参考以下文章