zoukankan      html  css  js  c++  java
  • [LeetCode] 22. Generate Parentheses Java

    题目:

    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:

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

    题意及分析:这道题是给出一个括号对的数目,求可能的合法的括号顺序。这道题可以应用回溯(这也是我做的第一道回溯题->->,也不知道怎么讲。。),对题目进行观察可知边界条件为 在任一个合法字符串的子字符串中:左括号数目大于等于右括号数目、左括号数<=n,所以我们可以得出回溯点。下面的代码我是用递归求解的,也可以用非递归求。首先用一个char类型的数组保存当前得到的值,然后每次对char[]进行判断,符合条件就进行下一个位置的求解,直到最后一个位置(i=2*n-1).

    代码:

    public class Solution {
        public List<String> generateParenthesis(int n) {
            
            List<String> resList = new ArrayList<>();
            char[] possible=new char[2*n];
            traceBack(resList,possible,0, 2*n);
    		return resList;
        }
    	
    	public void traceBack(List<String> resList,char[] possible,int t,int m){	//这里的m=2*n
    		char[] x={'(',')'};
    		if(t>=m){		//有解,输出结果
    			String string=String.valueOf(possible);
    			resList.add(string);
    		}else{
    			for(int i=0;i<=1;i++){
    				int left=0,right=0;
    				possible[t]= x[i];
    				for(int j=0;j<=t;j++){
    					if(possible[j]==')'){
    						right++;
    					}else
    						left++;
    				}
    				//边界条件为(的数目大于等于)数,且left<=n
    				if(left>=right&&left<=m/2){	//继续下一维度的计算
    					traceBack(resList,possible,t+1, m);
    				}
    			}
    		}
    		return;	
    	}
    }
    

      

  • 相关阅读:
    设计模式(观察者模式,MVC模式)
    设计模式(单例,委托模式)
    iOS API
    iOS介绍
    多种服饰颜色搭配
    国内npm镜像使用
    iOS开发拓展篇—应用之间的跳转和数据传
    iOS开发网络篇—使用ASI框架进行文件下载
    iOS开发网络篇—数据缓存(使用NSURLCache)
    iOS开发网络篇—发送json数据给服务器以及多值参数
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6939834.html
Copyright © 2011-2022 走看看