Find the least number of coins required that can make any change from 1 to 99 cents

后端 未结 27 2237
生来不讨喜
生来不讨喜 2020-12-07 10:08

Recently I challenged my co-worker to write an algorithm to solve this problem:

Find the least number of coins required that can make any change from

27条回答
  •  半阙折子戏
    2020-12-07 10:40

    Came across this one today, while studying https://www.coursera.org/course/bioinformatics

    DPCHANGE(money, coins)
     MinNumCoins(0) ← 0
     for m ← 1 to money
            MinNumCoins(m) ← ∞
            for i ← 1 to |coins|
                if m ≥ coini
                    if MinNumCoins(m - coini) + 1 < MinNumCoins(m)
                        MinNumCoins(m) ← MinNumCoins(m - coini) + 1
        output MinNumCoins(money)
    

    Takes a comma-separated string of denominations available, and the target amount.

    C# implementation:

        public static void DPCHANGE(int val, string denoms)
        {
            int[] idenoms = Array.ConvertAll(denoms.Split(','), int.Parse);
            Array.Sort(idenoms);
            int[] minNumCoins = new int[val + 1];
    
            minNumCoins[0] = 0;
            for (int m = 1; m <= val; m++)
            {
                minNumCoins[m] = Int32.MaxValue - 1;
                for (int i = 1; i <= idenoms.Count() - 1; i++)
                {
                    if (m >= idenoms[i])
                    {
                        if (minNumCoins[m - idenoms[i]] + 1 < minNumCoins[m])
                        {
                            minNumCoins[m] = minNumCoins[m - idenoms[i]] + 1;
                        }
                    }
                }
            }
        }
    

提交回复
热议问题