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);
}
}
}
時間複雜度:O(n)
空間複雜度:O(n)
原始碼github地址:https://github.com/zhangyu345293721/leetcode
相關文章
- 資料結構括號匹配問題資料結構
- 括號匹配的檢驗問題(C++)C++
- 【棧】括號匹配
- ACM 括號配對問題ACM
- interleave字串;及括號匹配分析字串
- [leetcode]有效的括號LeetCode
- HDU 5831 Rikka with Parenthesis II (括號匹配)
- 括號匹配;及找數字續分析
- 括號生成-LeetCode22LeetCode
- leetcode:遞迴:括號生成LeetCode遞迴
- [LeetCode] Generate Parentheses 生成括號LeetCode
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- 【題解】括號序列
- 括號匹配檢驗 資料結構運用資料結構
- Leetcode20. 有效的括號LeetCode
- Leetcode——20. 有效的括號LeetCode
- 【LeetCode-棧】有效的括號LeetCode
- LeetCode有效的括號(Python)LeetCodePython
- LeetCode 20. 有效的括號LeetCode
- 【LeetCode】 20.有效的括號LeetCode
- 每日一題: 有效括號每日一題
- 【leetcode】leetcode22括號生成通過程式碼及題解LeetCode
- 【leetcode】32. Longest Valid Parentheses 最長的有效匹配括號子串長度LeetCode
- UVA 673 括號的匹配——經典棧的應用
- LeetCode-022-括號生成LeetCode
- [LeetCode] Valid Parentheses 驗證括號LeetCode
- LeetCode 之 JavaScript 解答第20題 —— 有效的括號(Valid Parentheses)LeetCodeJavaScript
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- 【資料結構】棧的應用--括號的匹配(c++)資料結構C++
- LeetCode - 22. 括號的生成(遞迴)1LeetCode遞迴
- LeetCode-20. 有效的括號(棧模擬)LeetCode
- [LeetCode] Longest Valid Parentheses 最長有效括號LeetCode
- 關於路由器匹配主訊號的問題路由器
- Leetcode 20 有效的括號valid-parentheses(棧)LeetCode
- 括號畫家
- 字串匹配問題字串匹配
- 牛客題霸 [括號序列] C++題解/答案C++
- P3215 括號修復 題解