LeetCode 3: 括号匹配问题(PairsOfParentheses)

    输出一个正整数:n,让括号进行正确匹配,
    列出它的所有正确的排列方式:

package PairsOfParentheses;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import org.junit.Test;

public class testPairOfParentheses { 
	@Test
	public void fun(){
		//记录开始时间
		long startTime = System.currentTimeMillis();
		//输入一个数字
		Scanner input=new Scanner(System.in);
		System.out.print("输入一个数字:");
		int inputFigure=input.nextInt();
		//调用方法,排列所有的组合情况
		List<String> PairOfParenthesesList=generateParenthesis(inputFigure);
		//打印出链表中所有的组合方式
		for(String list:PairOfParenthesesList)
		System.out.println(list);
		
		System.out.println(PairOfParenthesesList.size());
		//记录结束时间
		long endTime = System.currentTimeMillis();
		//得出最后时间
		System.out.println((endTime-startTime)/1000+"s");
	}
	
    public List<String> generateParenthesis(int inputFigure){
    	 //定义一个链表,存储所有可能的情况
	     List<String> resultList=new ArrayList<String>();
	     if(inputFigure>0){   //定义一个两倍的数组
	    	 char[] parentheses=new char[2*inputFigure]; 
	    	 //定义一个递归函数
	    	solve(inputFigure,inputFigure,parentheses,resultList);
	     }
	     return resultList;
    }
    
    /**
     * @param left        剩余可用的左括号数
     * @param right       剩余可用的右括号数
     * @param parentheses 到上一次为止括号使用的情况
     * @param result      存放结果的集合
     */
    //递归调用,找出所有的组合情况
	private void solve(int left, int right, char[] parentheses, List<String> result){
      if(left<0 || right<0 ||left>right ){
    	  //出现这三种情况什么都不做
    	  
      }
      else if(left==0 && right==0){
    	  //如果当left为0且right为0,将字符串存入到list链表,这是是个出口
    	  //要遍历出来所有存在的情况
    	  result.add(new String(parentheses));
      }
      else{   //从后面到前面进行递归,直到找出符合条件的组合    	  
    	  //设置字符串下标
    	  int index=parentheses.length-left-right;
    	  
    	  parentheses[index]='(';
    	  //向左递归,找出所有的可能
    	  solve(left - 1, right, parentheses, result);
    	  
    	  parentheses[index]=')';
    	  //递归找出所有的可能
    	  solve(left, right-1, parentheses, result);
      }		
	}
}

 

点赞