1. 程式人生 > >招銀2018[編程題]尋找合法字符串

招銀2018[編程題]尋找合法字符串

name printf esp code oid true ostream core ()

給出一個正整數n,請給出所有的包含n個‘(‘和n個‘)‘的字符串,使得‘(‘和‘)‘可以完全匹配。

例如:

‘(())()‘,‘()()()‘ 都是合法的;

‘())()(‘是不合法的。
#include <stdio.h>
#include <iostream>
using namespace std;

#define MAX   50  
bool start = true;

//pos:       此時的位置下標
//NumPre:    剩余的左括號數目
//NumPost:  剩余的右括號數目
void helpCore(char *array, int pos, int
NumPre, int NumPost) { if (NumPre > NumPost){ //剩余的左括號多余右括號,不滿足 return; } if (NumPre == 0){ //左括號用完,則放右括號至右括號完 while (NumPost){ array[pos++] = ); NumPost--; } array[pos] = \0; if (start) { printf("%s", array); start
= false; } else printf(",%s", array); } else { if (NumPre == NumPost){ array[pos] = (; helpCore(array, pos + 1, NumPre - 1, NumPost); } else{ // NumPre <= NumPost array[pos] = (; helpCore(array, pos
+ 1, NumPre - 1, NumPost); array[pos] = ); helpCore(array, pos + 1, NumPre, NumPost - 1); } } return; } int main() { char array[MAX] = {0}; //memset(array, ‘0‘, sizeof(array)); int n; cin >> n; helpCore(array, 0, n, n); return 0; }

招銀2018[編程題]尋找合法字符串