22.Generate Parentheses【括号生成】

在这里插入图片描述
Refer: https://leetcode-cn.com/problems/generate-parentheses/solution/java-di-gui-qiu-jie-by-ssimz/
目前尚未弄明白,代码在本地调试通过。

package LeetCode;


import java.util.ArrayList;
import java.util.List;


public class Test {
    public static void main(String[] args) {
        System.out.println(generateParenthesis(3));
    }


    public  static List<String> generateParenthesis(int n) {
        List<String> list=new ArrayList<String>();
        String str=new String("(");//初始字符必定是左括号
        find(list,str,2*n-1,1);   //只剩下2*n-1个符号需要排列位置
        return list;
    }
    /*
    *s为中途未完成的字符串
    *n为需要添加的字符个数
    *num为s中左括号大于右括号的个数
    */
    public static void find(List list,String s,int n,int num)
    {
        if(n==0)
        {
            list.add(s);
            return;
        }
        if(n>=num+2&&num>=1)  //当剩余还需添加字符数大于左括号num+2且num>=1时,下一个添加的符号可以为左或者右括号
        {
            find(list,s+"(",n-1,num+1);
            find(list,s+")",n-1,num-1);
        }   
        else if(num==0)       //当num==0,说明此时左括号右括号数量相等,此时只能添加左括号
            find(list,s+"(",n-1,num+1);
        else//此步说明n<num+2,说明此时剩余添加的字符的个数除去还需匹配的num个右括号后还剩<2个(为0个,即n==num,剩下的全部用于添加右括号)
            find(list,s+")",n-1,num-1);
    }
}
发布了63 篇原创文章 · 获赞 1 · 访问量 2760

猜你喜欢

转载自blog.csdn.net/A_bad_horse/article/details/97651575
今日推荐