アルゴリズム:合計バック3つのコンビネーションコンビネーション

説明

トピック住所: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