22. 括号生成
知乎ID: 碼蹄疾?
碼蹄疾,畢業于哈爾濱工業大學。?
小米廣告第三代廣告引擎的設計者、開發者;?
負責小米應用商店、日歷、開屏廣告業務線研發;
主導小米廣告引擎多個模塊重構;?
關注推薦、搜索、廣告領域相關知識;
題目
給出 n 代表生成括號的對數,請你寫出一個函數,使其能夠生成所有可能的并且有效的括號組合。
例如,給出 n = 3,生成結果為:
分析
做題題感也蠻重要的,凡是這種生成全排列,滿足條件的排列,大部分情況下都要用遞歸。
首先左右括號必須相等。先確定前綴,然后遞歸,遞歸條件就是剩下的左括號數目,和剩下的右括號數目。
比如:
( , ?leftCount = 1, rightCount = 0;
就可以把題目轉化為:在左括號數目為3-1 = 2,右括號數目是3 - 0 = 3的解。
code
public class Solution {public List<String> generateParenthesis(int n) {ArrayList<String> list = new ArrayList<String>();String s = "";parenthesis(list, s, n, n);return list;}public void parenthesis(ArrayList<String> list, String s, Integer left, Integer right) {if (left == 0 && right == 0) {list.add(s);}if (left > 0) {parenthesis(list, s + '(', left - 1, right);}if (right > 0 && left < right) {parenthesis(list, s + ')', left, right - 1);}} }? ?微信掃碼關注更多題解!
?
轉載于:https://www.cnblogs.com/acceml/p/9282035.html
總結
- 上一篇: 经过阿里,百度一面,二面后,我总结了15
- 下一篇: Okhttp3-网络请求流程解析