关闭

LeetCode 264 Ugly Number II (递推)

标签: leetcode丑数2
338人阅读 评论(0) 收藏 举报
分类:

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.


题目链接:https://leetcode.com/problems/ugly-number-ii/

题目分析:用一个uglyNum数组记录,保证按升序构造,用当前的每个丑数,分别乘2,3,5其中比最大的大的最少的就是当前的下一个丑数,递推时间复杂度O(n)

public class Solution {
    
    public int Min3(int a, int b, int c) {
        return Math.min(a, Math.min(b, c));
    }
    
    public int nthUglyNumber(int n) {
        int[] uglyNum = new int[n + 5];
        uglyNum[1] = 1;
        int i = 1, i2 = 1, i3 = 1, i5 = 1, cur;
        while(i <= n) {
            cur = Min3(uglyNum[i2] * 2, uglyNum[i3] * 3, uglyNum[i5] * 5);
            if(cur == uglyNum[i2] * 2) {
                i2 ++;
            }
            if(cur == uglyNum[i3] * 3) {
                i3 ++;
            }
            if(cur == uglyNum[i5] * 5) {
                i5 ++;
            }
            uglyNum[++ i] = cur;
        }
        return uglyNum[n];
    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:626511次
    • 积分:14066
    • 等级:
    • 排名:第925名
    • 原创:803篇
    • 转载:7篇
    • 译文:0篇
    • 评论:121条
    博客专栏