LeetCode22GenerateParentheses--In Java

来源:互联网 发布:互联网与大数据 编辑:程序博客网 时间:2024/05/17 22:08

这个问题让人想到火车进站的次序问题,解的数量可以用卡特兰数求出。 
因此我想到其实括号的排列和栈混洗的各个情况是一一对应的。 
现有1、2、3三个数字,栈混洗后有123,132,213,231,321五种情况,312是不合法的。 
而观察可以发现123这种情况对应着“()()()”这种情况,而132则对应着“()(())”这种情况,因为左括号代表一次入栈,右括号代表一次出栈,同理213就是“(())()”等等。 
因此,用递归方法解这个问题,n代表了栈中元素数量,当然栈是“虚拟的”,m代表未入栈的元素个数,每个元素只能入栈一次,也只能出栈一次,这样模拟出栈混洗的各种情况。

public List<String> generateParenthesis(int n) {        List<String> result = new LinkedList();        getAllResult(result,0,n,new StringBuilder());        return result;    }    public void getAllResult(List<String> l,int n,int m,StringBuilder sb){        if(n==0 && m==0){            l.add(sb.toString());            return;        }        if(m<0||n<0)            return;        if(m>0){            StringBuilder sr = new StringBuilder(sb);//用一个新串传入下一层递归            getAllResult(l,n+1,m-1,sr.append('('));        }        if(n>0){            StringBuilder sr = new StringBuilder(sb);            getAllResult(l,n-1,m,sr.append(')'));        }    }
0 0
原创粉丝点击