招銀2018[編程題]尋找合法字符串
阿新 • • 發佈:2018-08-29
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, intNumPre, 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[編程題]尋找合法字符串