알고리즘 : 합계 백 세 가지 조합의 조합

설명

주제 주소 : https://leetcode.com/problems/combination-sum/

(중복 없음) 후보 번호 (후보)의 집합을 감안할와 대상 번호 (대상), 후보자의 모든 고유 한 조합을 찾을 경우 대상 후보 숫자의 합계.

동일한 숫자는 반복 횟수 무제한 후보들로부터 선택 될 수있다.

노트 :

  • (대상 포함) 모든 숫자는 양의 정수가 될 것입니다.
  • 이 솔루션 세트는 중복 조합을 포함 할 수 없습니다.
    예 1 :
Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
  [7],
  [2,2,3]
]

예 2 :

Input: candidates = [2,3,5], target = 8,
A solution set is:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

해결

아이디어 :; 반복하지 않도록 선택할 수 있습니다, 반복을 선택할 수 후보 종류의 배열은 후보 선택의 각 요소를 추가 할 수 있고,하지 않을 수도 있습니다. 그것은 단지 다시 사용하지 않는 것입니다, 또한 재활용에 사용됩니다. 두 조건 :

  1. target == 0 클론이 목록, 색인 목록 경우, 결과는 밖으로 변경됩니다 결과 목록, 메모 목록을 넣습니다.resultList.add(new ArrayList<>(list))
  2. target > 0 현재 요소에 가입 여부를 판단한다.
package backtracking;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

// https://leetcode.com/problems/combination-sum/
public class CombinationSum {

  public static void main(String[] args) {
    CombinationSum obj = new CombinationSum();
    int[] candicates = {2, 3, 6, 7};
    int target = 7;
    List<List<Integer>> resultList = obj.combinationSum(candicates, target);
    System.out.println(Arrays.toString(resultList.toArray()));
  }

  public List<List<Integer>> combinationSum(int[] candidates, int target) {
    List<List<Integer>> resultList = new ArrayList<>();
    Arrays.sort(candidates);
    recursive(candidates, target, 0, new ArrayList<>(), resultList);

    return resultList;
  }

  public void recursive(int[] candidates, int target, int start, List<Integer> list, List<List<Integer>> resultList) {
    if (target > 0) {
      for (int i = start; i < candidates.length && target >= candidates[i]; i++) {
        list.add(candidates[i]);
        recursive(candidates, target - candidates[i], i, list, resultList);
        list.remove(list.size() - 1);
      }
    } else if (target == 0) {
      resultList.add(new ArrayList<>(list));
    }
  }
}

다운로드

https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/CombinationSum.java

发布了127 篇原创文章 · 获赞 12 · 访问量 2万+

추천

출처blog.csdn.net/zgpeace/article/details/103760393