題目描述:
給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。
示例:nums = [1, 2, 3]
target = 4
所有可能的組合為:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
請注意,順序不同的序列被視作不同的組合。
因此輸出為 7。
高階:如果給定的陣列中含有負數會怎麼樣?
問題會產生什麼變化?
我們需要在題目中新增什麼限制來允許負數的出現?
致謝:特別感謝 @pbrother 新增此問題並建立所有測試用例。
和之前不同的是這裡只要返回滿足條件的個數即可,不需要其他的,因此如果使用遞迴的話肯定超時,因此考慮使用的是動態規劃來進行,
考慮target,dp[x] 表示的是目標數是x時的個數,那麼首先從1一直遍歷到target變數為i,對於每乙個數x,遍歷nums陣列,如果x>=i, dp[x] += dp[ x - i]。這個也很好理解,比如說對於[1,2,3] 4,這個例子,當我們在計算dp[3]的時候,3可以拆分為1+x,而x即為dp[2],3也可以拆分為2+x,此時x為dp[1],3同樣可以拆為3+x,此時x為dp[0],我們把所有的情況加起來就是組成3的所有情況了
參照新增鏈結描述
class solution
} return dp[target]; }}
效率還行其實
排名靠前的**
class solution
// }
// return res;
}private int helper(int nums, int target)
}memo[target] = res;
return res;}}
LintCode刷題 564 組合總和 IV
給出乙個都是正整數的陣列 nums,其中沒有重複的數。從中找出所有的和為 target 的組合個數。樣例樣例1 輸入 nums 1,2,4 和 target 4 輸出 6 解釋 可能的所有組合有 1,1,1,1 1,1,2 1,2,1 2,1,1 2,2 4 樣例2 輸入 nums 1,2 和 ta...
39 組合總和
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2...
39 組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...