377. Combination Sum IV

来源:互联网 发布:快压软件官方下载 编辑:程序博客网 时间:2024/05/19 17:05

1、题目描述

给一个无重复元素的数组和一个target,求有多少种不同的排列使得其合为target。


2、思路

动态规划。

dp[i]表示合为i有多少种表达方式。

dp[i] += dp[ i - x[j] ] ,if i >= x[j] ,dp[0] = 1

也就是说求和为i有多少种可能的时候,求出 合为( i - x[j] )有多少种可能, 再在每种可能后面加上 x[j] 就形成了和为i的排列。

复杂度 O(m*n)


3、代码

int combinationSum4(vector<int>& nums, int target) {        int dp[target+1];        dp[0]=1;        for(int i=1;i<=target;i++){            dp[i]=0;            for(int j=0;j<nums.size();j++){                if(i>=nums[j])                dp[i]+=dp[i-nums[j]];            }        }        return dp[target];    }


原创粉丝点击