首页 > 其他 > 详细

313. Super Ugly Number

时间:2016-07-05 08:46:35      阅读:209      评论:0      收藏:0      [点我收藏+]
    /*
     * 313. Super Ugly Number
     * 2016-7-4 by Mingyang
     * http://www.cnblogs.com/Liok3187/p/5016076.html
     * 跟ugly number II是一样的原理,但是我在自己做的时候遇到了同时出现两个14的情况(因为两种prime的组合
     * 可以达到这个结果,我就用HashSet过滤,殊不知过滤以后另一个的计数器的值不++了
     * 所以参考了大神的代码。如下所示:
     */
    public static int nthSuperUglyNumber(int n, int[] primes) {
        int[] dp = new int[n + 1], count = new int[primes.length];
        int dpIndex = 1, minIndex = -1;
        dp[0] = 1;
        while (dpIndex <= n) {
            int min = Integer.MAX_VALUE;
            for (int i = 0; i < primes.length; i++) {
                int tmp = dp[count[i]] * primes[i];
                if (tmp < min) {
                    min = tmp;
                    minIndex = i;
                }
            }
            count[minIndex]++;
//这里的count是指对应的primes的number的计数,可以为3,因为他不表示prime,只表示dp的index
            if (min != dp[dpIndex - 1]) {
                dp[dpIndex] = min;
                dpIndex++;
            }
        }
        return dp[n - 1];
    }

 

313. Super Ugly Number

原文:http://www.cnblogs.com/zmyvszk/p/5642253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!