找出从固定数字集中获得总和的所有可能方法

时间:2017-11-13 07:24:45

标签: sum set permutation dynamic-programming coin-change

问题很简单。有一套{2,4,6}。预期答案是获得数字6的所有可能的排列。因此,答案将是: -

{2,2,2},{2,4},{4,2},{6}

我尝试了什么: -

我正在尝试使用流行的“硬币改变”问题来解决这个问题。但在硬币变化中,排列不存在。方式{2,4}和{4,2}被认为是相同的。这是我的代码。它不考虑排列。

public static int NumberOfWays(int sum)
{
    int [][] memMatrix = new int [7][sum+1];
    for (int i = 2 ; i <= 6 ; i += 2)
    {
        for (int j = 0 ; j <= sum ; j += 2)
        {
            if (i == 2)
            {
                //using only 2 , there is only 1 way to get the sum
                memMatrix[i][j] = 1;
            }
            else if ( i > j)
            {
                //if total sum is less than the newly used denomination , then the number of ways will always remain same
                memMatrix[i][j] = memMatrix[i - 2][j];
            }
            else
            {
                //if this is the case then need to calculate without using the denomination + using the denomination
                memMatrix[i][j] = memMatrix[i - 2][j] + memMatrix[i][j - i];
            }
        }
    }
    for (int i = 2 ; i <= 6 ; i += 2)
    {
        for (int j = 2 ; j <= sum ; j += 2)
        {
            System.out.print(memMatrix[i][j]+" ");
        }
        System.out.print("\n");
    }

    return memMatrix[6][sum];
}

这是我与矩阵相关的输出。我如何计算排列?

1 1 1 
1 2 2 
1 2 3 
The number of ways to get 6 = 3

1 个答案:

答案 0 :(得分:0)

我得到了解决方案。这很简单。代码被评论。它可能需要一点跟踪。

FILETYPE:FILEPATH