Generate parentheses,生成括号对,递归,深度优先搜索。

问题描述:给n对括号,生成所有合理的括号对。比如n=2,(()),()()

算法思路:利用深度优先搜索的递归思想,对n进行深度优先搜索。边界条件是n==0;前面电话号组成字符串也是利用dfs。

public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        dfs(result,"",n,n);
        return result;
    }
    public void dfs(List<String> result, String s, int left, int right)//n个左括号,n个右括号
    {
        if(left > right)//右括号比左括号多,无法生成。直接返回。截枝。
        {
            return;
        }
        if(left == 0 && right == 0)//递归的边界条件。
        {
            result.add(s);
        }
        if(left > 0)
        {
            dfs(result, s+"(", left-1, right);
        }
        if(right > 0)
        {
            dfs(result, s+")", left, right-1);
        }
    }

 

posted @ 2016-05-30 18:13  32ddd  阅读(319)  评论(0编辑  收藏  举报