[LeetCode]--39. Combination Sum

来源:互联网 发布:jdk 7u79 windows x32 编辑:程序博客网 时间:2024/06/08 10:21

这里写图片描述

public class Solution {    public List<List<Integer>> combinationSum(int[] cands, int t) {        Arrays.sort(cands); // sort candidates to try them in asc order        List<List<List<Integer>>> dp = new ArrayList<>();        for (int i = 1; i <= t; i++) { // run through all targets from 1 to t            List<List<Integer>> newList = new ArrayList(); // combs for curr i            // run through all candidates <= i            for (int j = 0; j < cands.length && cands[j] <= i; j++) {                // special case when curr target is equal to curr candidate                if (i == cands[j]) newList.add(Arrays.asList(cands[j]));                // if current candidate is less than the target use prev results                else for (List<Integer> l : dp.get(i-cands[j]-1)) {                    if (cands[j] <= l.get(0)) {                        List cl = new ArrayList<>();                        cl.add(cands[j]); cl.addAll(l);                        newList.add(cl);                    }                }            }            dp.add(newList);        }        return dp.get(t-1);    }}

But, we’d best use backstracking algorithm!
A general approach to backtracking questions in Java (Subsets, Permutations, Combination Sum, Palindrome Partitioning)

Reference

https://discuss.leetcode.com/category/47/combination-sum
https://discuss.leetcode.com/topic/46161/a-general-approach-to-backtracking-questions-in-java-subsets-permutations-combination-sum-palindrome-partitioning

https://discuss.leetcode.com/topic/8200/iterative-java-dp-solution/2

0 0
原创粉丝点击