题意:
        给定一个整数数组 nums 表示不同数额的硬币和一个正整数 target 表示总金额,请你计算并返回可以凑出总金额的的组合数。
        如果凑不出 target 则返回 0。

方法一:
动态规划(完全背包)

思路:
        dp[i]表示硬币凑成 i 的组合数。
        不同数额的硬币可以取任意个凑成target总金额,因此是完全背包问题。

        

    

class Solution {
public:
    int dp[50005]={0};//dp[i]表示凑成i的组合数
    int change(int target, vector<int>& nums) {
        int n=nums.size();
        dp[0]=1;//初始化
        for(int i=0;i<n;i++){//完全背包
            for(int j=nums[i];j<=target;j++){
                dp[j]+=dp[j-nums[i]];
            }
        }
        return dp[target];
    }
};

时间复杂度:
空间复杂度:

方法二:
java

思路:
        java实现。
        

import java.util.*;


public class Solution {
    
    public int change (int target, int[] nums) {
        int[] dp=new int[target+1];//dp[i]表示凑成i的组合数
        int n=nums.length;
        dp[0]=1;//初始化
        for(int i=0;i<n;i++){//完全背包
            for(int j=nums[i];j<=target;j++){
                dp[j]+=dp[j-nums[i]];
            }
            
        }
        return dp[target];
    }
}

时间复杂度:
空间复杂度: