Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.87 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5.  
  6. namespace test
  7. {
  8.     class Program
  9.     {
  10.         static char open = '(';
  11.         static char close = ')';
  12.         static int N = 10;
  13.  
  14.         static void Main(string[] args)
  15.         {
  16.             List<string> list = new List<string>();
  17.             GetStringList(ref list);
  18.             Console.WriteLine(string.Join(',', list.ToArray()));
  19.             Console.ReadKey();
  20.         }
  21.  
  22.         private static void GetStringList(ref List<string> list)
  23.         {
  24.             foreach (var str in GetStrings(open.ToString()))
  25.             {
  26.                 list.Add(str);
  27.             }
  28.         }
  29.  
  30.         private static IEnumerable<string> GetStrings(string tmp)
  31.         {
  32.             int prevOpen = Regex.Matches(tmp, "\\(").Count;
  33.             int prevClose = Regex.Matches(tmp, "\\)").Count;
  34.  
  35.             if (tmp.Length == 2 * N) yield return tmp;
  36.  
  37.             else if (tmp.Length == 2 * N - 1) yield return (tmp + close);
  38.  
  39.             else if (prevOpen == prevClose)
  40.             {
  41.                 tmp += open;
  42.                 foreach (var tmp2 in GetStrings(tmp))
  43.                 {
  44.                     yield return tmp2;
  45.                 }
  46.             }
  47.            
  48.             else if (prevOpen == N)
  49.             {
  50.                 tmp += close;
  51.                 foreach (var tmp2 in GetStrings(tmp))
  52.                 {
  53.                     yield return tmp2;
  54.                 }
  55.             }
  56.  
  57.             else if (prevOpen < N)
  58.             {
  59.                 var strings1 = GetStrings(tmp + open).ToList(); ;
  60.                 var strings2 = GetStrings(tmp + close).ToList();
  61.  
  62.                 strings1.AddRange(strings2);
  63.                 foreach (var tmp3 in strings1) { yield return tmp3; }
  64.             }
  65.  
  66.             yield break;
  67.         }
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement