leetcode-22-括號生成(generate parentheses)-java
阿新 • • 發佈:2018-12-29
題目及測試
package pid022; /* 生成括號 給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。 例如,給出 n = 3,生成結果為: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] */ import java.util.List; public class main { public static void main(String[] args) { int[] testTable = {3,2,6}; for (int ito : testTable) { test(ito); } } private static void test(int ito) { Solution solution = new Solution(); List<String> rtn; long begin = System.currentTimeMillis(); System.out.println("ito="+ito); System.out.println(); //開始時列印陣列 rtn= solution.generateParenthesis(ito);//執行程式 long end = System.currentTimeMillis(); System.out.println("rtn=" ); for(int i=0;i<rtn.size();i++){ System.out.print(rtn.get(i)+" "); } System.out.println(); System.out.println("耗時:" + (end - begin) + "ms"); System.out.println("-------------------"); } }
解法1(成功,2ms,極快)
nowstr為當前字串,left為剩下的左括號,right為剩下的右括號
如果right>left說明左邊已經有多的( 接下來))或者()都可以,可以加右括號
如果left>0說明left有多的,可以加左括號
如果left=right=0 說明此次結束,加入result
package pid022; import java.sql.Array; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; public class Solution { public List<String> result=new ArrayList<>(); public List<String> generateParenthesis(int n) { generate("", n, n); return result; } public void generate(String nowStr,int left,int right){ if(left==0&&right==0){ result.add(nowStr); return; } if(right>left){ generate(nowStr+")", left, right-1); } if(left>0){ generate(nowStr+"(", left-1, right); } } }