22. 括号生成
知乎ID: 碼蹄疾?
碼蹄疾,畢業(yè)于哈爾濱工業(yè)大學(xué)。?
小米廣告第三代廣告引擎的設(shè)計(jì)者、開(kāi)發(fā)者;?
負(fù)責(zé)小米應(yīng)用商店、日歷、開(kāi)屏廣告業(yè)務(wù)線研發(fā);
主導(dǎo)小米廣告引擎多個(gè)模塊重構(gòu);?
關(guān)注推薦、搜索、廣告領(lǐng)域相關(guān)知識(shí);
題目
給出 n 代表生成括號(hào)的對(duì)數(shù),請(qǐng)你寫(xiě)出一個(gè)函數(shù),使其能夠生成所有可能的并且有效的括號(hào)組合。
例如,給出 n = 3,生成結(jié)果為:
分析
做題題感也蠻重要的,凡是這種生成全排列,滿足條件的排列,大部分情況下都要用遞歸。
首先左右括號(hào)必須相等。先確定前綴,然后遞歸,遞歸條件就是剩下的左括號(hào)數(shù)目,和剩下的右括號(hào)數(shù)目。
比如:
( , ?leftCount = 1, rightCount = 0;
就可以把題目轉(zhuǎn)化為:在左括號(hào)數(shù)目為3-1 = 2,右括號(hào)數(shù)目是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);}} }? ?微信掃碼關(guān)注更多題解!
?
轉(zhuǎn)載于:https://www.cnblogs.com/acceml/p/9282035.html
總結(jié)
- 上一篇: 经过阿里,百度一面,二面后,我总结了15
- 下一篇: Okhttp3-网络请求流程解析