這一道題又是集合上面的問題,能夠重複使用數字,來求得幾個數之和等於目標。java
咱們能夠先將大於該數字的元素去除掉,以後取出一個元素,作減法,將獲得的結果再放到集合中比較,直至最後減得結果爲零則成功,爲負數則失敗回退。所以咱們能夠使用遞歸、堆棧、隊列等來解決。spa
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidates); List<List<Integer>> result = new ArrayList<List<Integer>>(); getResult(result, new ArrayList<Integer>(), candidates, target, 0); return result; } private void getResult(List<List<Integer>> result, List<Integer> cur, int candidates[], int target, int start){ if(target > 0){ for(int i = start; i < candidates.length && target >= candidates[i]; i++){ cur.add(candidates[i]); getResult(result, cur, candidates, target - candidates[i], i); cur.remove(cur.size() - 1); }//for }//if else if(target == 0 ){ result.add(new ArrayList<Integer>(cur)); }//else if } }
遇到這種問題,首先想到遞歸,動態規劃等方面的知識,而後不斷地練習和嘗試。3d