給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。
示例:
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。
方法一:
遞迴(超時)。
class
solution
void
dfs(vector<
int>
& nums,
int target)
for(
int i =
0; i < nums.
size()
;++i)
return;}
};
方法二:
動態規劃。這道題不要看作是揹包問題或者是零錢問題,而要看作是爬樓梯問題。給定的nums陣列表示每次可以爬的樓梯的層數,target表示要爬的總層數,問題轉化為,每次可以爬nums層樓梯,有多少種方法能夠爬到target。
dp[i]表示爬i層樓梯,共有多少種方法。
可以選擇從i-nums[0]位置,一次性爬nums[0]層;
可以選擇從i-nums[1]位置,一次性爬nums[1]層;
…以此類推;
注意這道題會整型溢位,因此需要解決溢位問題;
class
solution
}return dp.
back()
% int_max;}}
;
LeetCode 377 組合總和
這道題目是在陣列中找到和為給定目標正整數的組合的個數,題目如下所示 這道題目就難在不限陣列中元素使用的個數,我們如果用窮舉的方法很難得到正確的答案。於是我們可以想到用動態規劃的思想來解決這個問題。首先我們求的是和,我們就可以把和進行拆分,如題目中的例子為例,num s 1 2,3 nums 1,2,...
leetcode 377 組合總和
給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。示例 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。不像組合總和 組合總和 ...
LeetCode 377 組合總和
給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。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。class solution ...