Example #1
0
        public static ParensResult GenerateParens(int count)
        {
            if (count < 0)
            {
                return(null);
            }

            RecursionCount rc = new RecursionCount();

            char[]        str  = new char[count * 2];
            List <string> list = new List <string>();

            AddParen(list, count, count, str, 0, rc);
            return(new ParensResult()
            {
                list = list,
                recursionCount = rc.count
            });
        }
Example #2
0
        private static void AddParen(List <string> list,
                                     int leftRem, int rightRem, char[] str, int index, RecursionCount rc)
        {
            rc.count++;

            if (leftRem < 0 || rightRem < leftRem)
            {
                // invalid state
                return;
            }

            if (leftRem == 0 && rightRem == 0)
            {
                list.Add(new string(str));
                return;
            }

            str[index] = '(';
            AddParen(list, leftRem - 1, rightRem, str, index + 1, rc);

            str[index] = ')';
            AddParen(list, leftRem, rightRem - 1, str, index + 1, rc);
        }
Example #3
0
        private static void AddParen2Count(List <string> list,
                                           int leftRemaining, int rightAvailable, char[] str, int index, RecursionCount rc)
        {
            rc.count++;

            if (leftRemaining == 0 && rightAvailable == 0)
            {
                list.Add(new string(str));
                return;
            }

            if (leftRemaining > 0)
            {
                str[index] = '(';
                AddParen2Count(list, leftRemaining - 1, rightAvailable + 1, str, index + 1, rc);
            }

            if (rightAvailable > 0)
            {
                str[index] = ')';
                AddParen2Count(list, leftRemaining, rightAvailable - 1, str, index + 1, rc);
            }
        }