Leetcode 22, 77: 回溯问题

来源:互联网 发布:trivium算法 编辑:程序博客网 时间:2024/05/20 02:54

22. Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

code:

class Solution {     public List<String> generateParenthesis(int n) {        List<String> list = new ArrayList<String>();        backtrack(list, "", 0, 0, n);        return list;    }    public void backtrack(List<String> list, String str, int open, int close, int max){        if(str.length() == max*2){            list.add(str);            return;        }        if(open < max)            backtrack(list, str + "(", open+1, close, max);        if(close < open)            backtrack(list, str+")", open, close+1, max);    }}

77. Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 … n.

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]

code:

class Solution {    public List<List<Integer>> combine(int n, int k) {        List<List<Integer>> res = new LinkedList<List<Integer>>();        List<Integer> comb = new LinkedList<>();        dfs(res, comb, n, k, 1);        return res;    }    public void dfs(List<List<Integer>> res, List<Integer> comb, int n, int k, int start) {        if(comb.size() == k) {            res.add(new LinkedList<Integer>(comb));            return;        }        for(int i=start; i<=n; i++) {            comb.add(i);            dfs(res, comb, n, k, i+1);            comb.remove(comb.size()-1);        }    }}

特别注意

res.add(new LinkedList<Integer>(comb));
dfs(res, comb, n, k, i+1);