CMB10. 寻找合法字符串
描述
输入描述
输入为1个正整数输出描述
输出为所有合法的字符串,用英文逗号隔开示例1
输入:
2
输出:
(()),()()
C 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2019-04-30
#include "stdio.h" int is_not_first = 0; void dfs(int nl, int nr, char *result, int i){ if(nl==0 && nr==0){ result[i] = 0; if(is_not_first) printf(",%s",result); else{ printf("%s", result); is_not_first = 1; } return; } if(nl>0){ result[i] = '('; dfs(nl-1, nr, result, i+1); } if(nr>nl){ result[i] = ')'; dfs(nl,nr-1, result, i+1); } } int main(){ int n; char buf[1024]; while(scanf("%d", &n) != EOF){ is_not_first = 0; dfs(n,n,buf,0); printf("\n"); } }
C++ 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2018-08-17
#include<bits/stdc++.h> using namespace std; void jianli(int left,int right,string str,vector<string>& result) { if(right<left) return; if(right==0&&left==0) result.push_back(str); if(left>0) jianli(left-1,right,str+'(',result); if(right>0) jianli(left,right-1,str+')',result); } int main() { int n; while(cin>>n) { string str; vector<string>result; jianli(n,n,str,result); for(int i=0;i<result.size()-1;i++) cout<<result[i]<<","; cout<<result[result.size()-1]<<endl; } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-08-19
#include<iostream> #include<vector> using namespace std; int main() { int n; void generateString(int,int, string,vector<string> &); while(cin >> n) { vector<string> s; generateString(n,n,"",s); cout << s[0]; for(int i = 1; i < s.size(); i++) { cout << ',' <<s[i]; } cout<<endl; } return 0; } void generateString(int leftNum, int rightNum, string str, vector<string> &s) { if (leftNum == 0 && rightNum == 0) { s.push_back(str); } if (leftNum > 0)generateString(leftNum - 1, rightNum, str + '(', s); if (rightNum > 0 && rightNum > leftNum)generateString(leftNum, rightNum - 1, str + ')', s); }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-12-23
#include<stdio.h> int is_no_first=0; void dfs(int nl,int nr,char*result,int i) { if(nl==0&&nr==0) { result[i]=0; if(is_no_first) printf(",%s",result); else { printf("%s",result); is_no_first=1; } return; } if(nl>0) { result[i]='('; dfs(nl-1,nr,result,i+1); } if(nr>nl) { result[i]=')'; dfs(nl,nr-1,result,i+1); } } int main() { int n; char buf[1024]; while(scanf("%d",&n)!=EOF) { is_no_first=0; dfs(n,n,buf,0); printf("\n"); } }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-11-25
#include<stdio.h> int is_no_first=0; void dfs(int nl,int nr,char*result,int i) { if(nl==0&&nr==0) { result[i]=0; if(is_no_first) printf(",%s",result); else { printf("%s",result); is_no_first=1; } return; } if(nl>0) { result[i]='('; dfs(nl-1,nr,result,i+1); } if(nr>nl) { result[i]=')'; dfs(nl,nr-1,result,i+1); } } int main() { int n; char buf[1024]; while(scanf("%d",&n)!=EOF) { is_no_first=0; dfs(n,n,buf,0); printf("\n"); } }