# Combination Sum IV Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. **Example:** ``` 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. ``` **Follow up:** ``` What if negative numbers are allowed in the given array? How does it change the problem? What limitation we need to add to the question to allow negative numbers? ``` **Credits:** ``` Special thanks to @pbrother for adding this problem and creating all test cases. ``` **Code** ``` class Solution { int count = 0; int currSum = 0; int target; int[] nums; public int combinationSum4(int[] nums, int target) { // corner case if(nums == null) return 0; // init the global this.nums = nums; this.target = target; bt(); return count; } public void bt() { if(currSum == target) { count++; return; } // > target if(currSum > target) return; // < target for(int num : nums) { // add num to sum currSum += num; // backtracking bt(); // remove num from sum currSum -= num; } } } ``` ```python= class Solution: def combinationSum4(self, nums: List[int], target: int) -> int: if not nums or target <= 0: return 0 table = dict() def dfs(cur): nonlocal nums, table if cur < 0: return 0 if cur in table: return table.get(cur) res = 0 for num in nums: if num > cur: break res += dfs(cur - num) table[cur] = res return table[cur] nums.sort() table[0] = 1 return dfs(target) ```