zoukankan      html  css  js  c++  java
  • Leetcode刷题日常--1

     首先是读懂题目,丑数是由1开始乘2,乘3或者乘5的数的一个有序序列。要得到第n个丑数,所以我们就需要得到直到n的丑数序列。得到这个序列,需要从1开始乘2,乘3或者乘5,就定义三个索引a,b,c,一开始索引的位置都为0,所以得到三个数n2=dp[a]*2,n3=p[b]*3,n5=p[c]*5,这三个数表示从索引位置的丑数乘2,乘3或者乘5得到的新的丑数。当乘以2后,乘以2的索引a++,乘3和乘5一样。由于序列是有序的,所以我们需要得到这三个数的最小值将其加入到序列中,如果加入的数为n2,则乘2的索引a++,如果加入的数为n3,则乘3的索引b++,如果加入的数为n5,则乘2的索引c++。由于n2,n3,n5可能互相相等,所以对三个位置的数都要进行判断是否为新加的丑数,如果是则索引位置加1,直到得到第n个丑数。

    public class Solution {
        public int NthUglyNumber(int n) {
            int[] dp = new int[n];
            dp[0] = 1;
            int a=0,b=0,c=0;
            for(int i=1;i<n;i++)
            {
                int n2 = dp[a]*2, n3 = dp[b]*3, n5 = dp[c]*5;
                int min = Math.Min(Math.Min(n2,n3),n5);
                dp[i] = min;
                if(dp[i] == n2)
                    a++;
                if(dp[i] == n3)
                    b++;
                if(dp[i] == n5)
                    c++;
            }
            return dp[n-1];
        }
    }
    

      

  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/sjp737420/p/14587410.html
Copyright © 2011-2022 走看看