Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text.RegularExpressions;
- namespace test
- {
- class Program
- {
- static char open = '(';
- static char close = ')';
- static int N = 10;
- static void Main(string[] args)
- {
- List<string> list = new List<string>();
- GetStringList(ref list);
- Console.WriteLine(string.Join(',', list.ToArray()));
- Console.ReadKey();
- }
- private static void GetStringList(ref List<string> list)
- {
- foreach (var str in GetStrings(open.ToString()))
- {
- list.Add(str);
- }
- }
- private static IEnumerable<string> GetStrings(string tmp)
- {
- int prevOpen = Regex.Matches(tmp, "\\(").Count;
- int prevClose = Regex.Matches(tmp, "\\)").Count;
- if (tmp.Length == 2 * N) yield return tmp;
- else if (tmp.Length == 2 * N - 1) yield return (tmp + close);
- else if (prevOpen == prevClose)
- {
- tmp += open;
- foreach (var tmp2 in GetStrings(tmp))
- {
- yield return tmp2;
- }
- }
- else if (prevOpen == N)
- {
- tmp += close;
- foreach (var tmp2 in GetStrings(tmp))
- {
- yield return tmp2;
- }
- }
- else if (prevOpen < N)
- {
- var strings1 = GetStrings(tmp + open).ToList(); ;
- var strings2 = GetStrings(tmp + close).ToList();
- strings1.AddRange(strings2);
- foreach (var tmp3 in strings1) { yield return tmp3; }
- }
- yield break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement