乘風破浪:LeetCode真題_039_Combination Sum

乘風破浪:LeetCode真題_039_Combination Sum

1、前言

    這一道題又是集合上面的問題,能夠重複使用數字,來求得幾個數之和等於目標。java

2、Combination Sum

2.1 問題

2.2 分析與解決

    咱們能夠先將大於該數字的元素去除掉,以後取出一個元素,作減法,將獲得的結果再放到集合中比較,直至最後減得結果爲零則成功,爲負數則失敗回退。所以咱們能夠使用遞歸、堆棧、隊列等來解決。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
    }
}

3、總結

    遇到這種問題,首先想到遞歸,動態規劃等方面的知識,而後不斷地練習和嘗試。3d

相關文章
相關標籤/搜索