Example:java
nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) Note that different sequences are counted as different combinations. Therefore the output is 7.
統計個數,若是仍是用上3題的方法,超時了。c++
1 class Solution { 2 public: 3 int finalres ; 4 int combinationSum4(vector<int>& candidates, int target) { 5 help(0,candidates,target); 6 return finalres; 7 8 } 9 void help(int cursum,vector<int>& candidates,int target){ 10 if(cursum==target) 11 finalres ++; 12 if(cursum>target) 13 return; 14 for(int i = 0;i<candidates.size();i++){ 15 help(cursum,candidates,target-candidates[i]); 16 } 17 } 18 };
只是統計個數的話,實際上是不用把每一個組合都排出來,並且這個題並非真正意義的排列問題spa
由於每一個數字能夠用無限次。code
c++ leetcode有bug 因此用javablog
1 class Solution { 2 public int combinationSum4(int[] nums, int target) { 3 int[] dp = new int[target + 1]; 4 dp[0] = 1; 5 for (int i = 1; i <=target; i++) 6 for (int j = 0; j < nums.length; j++) 7 if (i - nums[j] >= 0) 8 dp[i] += dp[i - nums[j]]; 9 return dp[target]; 10 } 11 }