49-丑数

作者: 一方乌鸦 | 来源:发表于2020-05-07 09:37 被阅读0次

    我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
    示例:
    输入: n = 10
    输出: 12
    解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
    考虑动态规划:当前项的值,是前面某一项的值乘 2,3,5

    class Solution {
        public int nthUglyNumber(int n) {
            int[] res = new int[n];
            res[0] = 1;
            int p2 = 0;
            int p3 = 0;
            int p5 = 0;
            for (int i = 1; i < n; i++) {
                int r2 = 2 * res[p2];
                int r3 = 3 * res[p3];
                int r5 = 5 * res[p5];
                res[i] = min(r2, r3, r5);
    
                if (r2 == res[i]) p2++;
                if (r3 == res[i]) p3++;
                if (r5 == res[i]) p5++;
            }
            return res[n - 1];
        }
    
        private int min(int i1, int i2,  int i3) {
            int t  = Math.min(i1, i2);
            return Math.min(t, i3);
        }
    }
    

    相关文章

      网友评论

          本文标题:49-丑数

          本文链接:https://www.haomeiwen.com/subject/xafqghtx.html