括號生成

描述:
給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。

例如,給出 n = 3,生成結果為:

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

思想:dfs+剪枝


class Solution {
  public List<String> generateParenthesis(int n) {
    String str = "()";
    List<String> res = new ArrayList<>();
    if(n==0) {
      return res;
    }
    LinkedList<Character> temp = new LinkedList<>();
    int left = 0;
    int right = 0;
    dfs(str,res,temp,n,left,right);
    return res;
  }

  private void dfs(String str, List<String> res, LinkedList<Character> temp, int n, int left, int right) {
    if(temp.size()==2*n) {
      if(isFit(temp)) {
        add2Temp(res,temp);
      }
      return;
    }
    if(left>n || right>n) {
      return;
    }

    for(int i=0;i<str.length();i++) {
      temp.add(str.charAt(i));
      if(i==0) {
        dfs(str,res,temp,n,left+1,right);
      }else {
        dfs(str,res,temp,n,left,right+1);
      }
      temp.pollLast();
    }
  }

  private boolean isFit(LinkedList<Character> temp) {
    LinkedList<Character> stack = new LinkedList<>();
    for(int i=0;i<temp.size();i++) {
      char c = temp.get(i);
      if(stack.size()==0) {
        stack.add(c);
      }else {
        if(c==')' && stack.getLast()=='(') {
          stack.pollLast();
        }else {
          stack.add(c);
        }
      }
    }
    return stack.size()==0;
  }

  private void add2Temp(List<String> res, LinkedList<Character> temp) {
    StringBuffer s = new StringBuffer();
    for(int i=0;i<temp.size();i++) {
      s.append(temp.get(i));
    }
    res.add(s.toString());
  }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 題目 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。 例如,給出 n ...
    半畝房頂閱讀 402評論 0 1
  • 題目描述: 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。 例如,給出...
    LeeYunFeng閱讀 1,425評論 0 50
  • 題目 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。 例如,給出 n ...
    玖月晴閱讀 1,086評論 0 1
  • 22. 括號生成 描述 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。...
    GoMomi閱讀 370評論 0 0
  • 在口語中,“好色”應為貶義詞,大家都覺得一個人一旦貼上了好色的標簽,一定是生性風流,生活作風有問題,見到入眼的異性...
    做個不平凡的人閱讀 2,183評論 0 1

友情鏈接更多精彩內(nèi)容