1. 程式人生 > >小米麵試題:N對括號的所有合法狀態

小米麵試題:N對括號的所有合法狀態

給定N對括號,輸出其所有的合法的組合狀態,例如,N=3,所有的合法狀態為:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”

思路:還是深搜DFS的思路,深搜的過程關鍵在於記錄已經用掉的左括號個數和右括號的個數,當用過的左括號個數小於右括號則非法;當二者個數和大於2N則非法;當二者個數相等且數目等於2N則為合法。

#include<iostream>
using namespace std;
#define PAIR 50
char str[PAIR * 2 + 1]; // 設括號對數不超過50, str記錄括號組合狀態
void DFS_bracket(int n, int left_used, int right_used)
{
    if(left_used == right_used && left_used + right_used == 2*n)
    {
        printf("%s\n",str);
        return;
    }
    if(left_used < right_used || left_used + right_used >= 2*n)
    {
        return ;
    }
    int index = left_used + right_used;
    str[index] = '(';
    DFS_bracket(n, left_used + 1, right_used);
 
    str[index] = ')';
    DFS_bracket(n, left_used, right_used + 1);
}
 
void main()
{
    int N;
    scanf("%d", &N);
    DFS_bracket(N,0,0);
}


相關推薦

小米麵試題N括號所有合法狀態

給定N對括號,輸出其所有的合法的組合狀態,例如,N=3,所有的合法狀態為:"((()))”, “(()())”, “(())()”, “()(())”, “()()()” 思路:還是深搜DFS的思路,深搜的過程關鍵在於記錄已經用掉的左括號個數和右括號的個數,當用過的左

輸出n括號所有有效的匹配 java實現

 原題 為 :Print all combinations of balanced parentheses input: 3 (e.g., 3 pairs of parentheses)outpu

9.9遞歸和動態規劃(六)——打印n括號所有有效組合(即左右括號正確配對)

思路 即使 情況 else 字符 ram 配對 字符串 pop /** * 功能:打印n對括號的所有有效組合(即左右括號正確配對)。 */ 兩種方法: 方法一: /** * 思路:在括號的最前面或者原有的每對括號中面插入一對括號。至於其它

n括號可以有多少種匹配排列方式(演算法面試題)

問題:n對括號可以有多少種匹配排列方式?比如兩對括號可以有兩種:()()和(()) 思路:問題可轉化為:在一個string中包含兩個字元:'('和')',他們出現的次數都為n,並且任何時候'('出現的次數總是>=')'出現的次數。 解決方案(遞迴): 標誌:l: 左括

輸出n括號所有有效排列組合

問題: 輸出n對括號所有有效的排列組合。比如三對括號,其有效的排列組合方式總共有5種:()()(),((())),(())(),()(()),(()())。 解決思路: 將一對括號編碼為01,即左括號為0,右括號為1,那麼n對括號的所有排列組合(不一定有效)就是n個0和n

給定n括號,編寫一個函式來生成正確括號所有組合。

本題源自leetcode ----------------------------------------------------------------------------------------------- 思路:  1  用回溯法。用變數m 表示左括號的數量。n

n括號的匹配方式(卡特蘭數)

4對括號有多少種可能的合法匹配方式?n對括號呢? 此題是卡特蘭數的一個通常應用,相似的還有出棧順序等。關於卡特蘭數的具體內容,請參閱百度百科或Wiki. http://baike.baidu.com/view/2499752.htm   網路上可以搜到很多相關的題目和解答

面試程式設計題拾遺(06) --- 列印n括號的全部有效組合

如題所述,當n=3時,可能的組合有:(()()), ((())), ()(()), (())(), ()()() 程式碼如下(有註釋): import java.util.ArrayList; im

百度的一道筆試題N個從大到小排好序的整型佇列,求top M元素

題意詳解:有N個佇列,其中的元素均已經從大到小排序,求出最大的M個元素。 分析: 很容易想到,top elements問題的通用解法是堆(優先佇列),但是N和M的大小關係不確實,所以不好處理。 這裡,我們分2種情況來考慮。 (我們假設資料輸入規則是:第一行輸入N和M;接下

試題談談程序的理解?談談你執行緒的理解?2.程序死鎖的原因?如何解決程序死鎖?

2.談談對程序的理解? 答:首先程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位,程序

9.9遞迴和動態規劃(六)——列印n括號的全部有效組合(即左右括號正確配對)

/**  * 功能:列印n對括號的全部有效組合(即左右括號正確配對)。 */ 兩種方法: 方法一: /** * 思路:在括號的最前面或者原有的每對括號裡面插入一對括號。至於其他任意位置,比如字

列印n括號的全部有效組合

這道題最基本的思路是求出n對括號的全排列,然後對每種排列方式判定是否有效。判定方法如下: bool IsMatch(string& str) { if(str.size() % 2 != 0

22.Generate Parentheses&n括號的全部有效組合

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a so

HashM-Java面試題如何HashMap按鍵值排序

Java中HashMap是一種用於儲存“鍵”和“值”資訊對的資料結構。不同於Array、ArrayList和LinkedLists,它不會維持插入元素的順序。 因此,在鍵或值的基礎上排序HashMap是一個很難的面試問題,如果你不知道如何解決的話。下面讓我們看看如何解

n括號問題,(求n括號的正確排列有多少)

import java.util.ArrayList; import java.util.List; import java.ut

【LeetCode/LintCode】丨Google面試題N皇后問題

n皇后問題是將n個皇后放置在n*n的棋盤上,皇后彼此之間不能相互攻擊(任意兩個皇后不能位於同一行,同一列,同一斜線)。 給定一個整數n,返回所有不同的n皇后問題的解決方案。 每個解決方案包含一個明確的n皇后放置佈局,其中“Q”和“.”分別表示一個女王和一個空位置。 線上評測地址: LintCode 領釦​ 樣

求出對應N所有合法匹配括號 (DFS)---小米筆試題

給定N對括號,輸出其所有的合法的組合狀態,例如,N=3,所有的合法狀態為:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”; 解析: 還是深搜DFS的

n括號所有可能情況

括號 main color 思路 出棧 gin col r+ div 所有可能情況的數量為卡特蘭數。故求所有可能的出棧情況與此類似。 思路: 若左括號沒全插入,則插入左括號; 若已插入左括號數比已插入右括號數多,則插入右括號; 1 #include<st

19. 中興面試題輸入兩個整數n和m, 從數列1,2,...,n中任意選擇幾個數,使其和等於m, 要求編寫程式輸出所有的組合

2010年中興面試題程式設計求解:輸入兩個整數 n 和 m,從數列1,2,3.......n中隨意取幾個數, 使其和等於 m ,要求將其中所有的可能組合列出來. 分析: 可以使用遞迴思想, 從第n個數開始找其組合, 1)包括n的所有組合 2)不包括n的所有組合 把所有組

劍指Offer面試題43(Java版)n個骰子的點數

pac pos max mod ins pri class pro bili 題目:把n個骰子仍在地上。全部骰子朝上一面的點數之和為s,輸入n,打印出s的全部可能的值出現的概率。 解法一:基於遞歸求骰子的點數,時間效率不夠高 如今我們考慮怎樣統計每個點數出現的次數。要向