LeetCode 3: PairsOfParentheses (括號匹配問題)

菜鳥Octopus發表於2018-08-20

    輸出一個正整數: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);
      }		
	}
}

時間複雜度:O(n)

空間複雜度:O(n)


原始碼github地址:https://github.com/zhangyu345293721/leetcode

相關文章