Ejemplo n.º 1
0
        public IList <string> LetterCasePermutation(string S)
        {
            //先构造一棵树
            BinaryStringTreeNode         root  = new BinaryStringTreeNode("");
            Queue <BinaryStringTreeNode> queue = new Queue <BinaryStringTreeNode>();

            queue.Enqueue(root);

            foreach (char c in S)
            {
                char lower, upper;
                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
                {
                    if (c >= 'a' && c <= 'z')
                    {
                        lower = c;
                        upper = (char)(c - 32);
                    }
                    else
                    {
                        lower = (char)(c + 32);
                        upper = c;
                    }
                }
                else
                {
                    lower = c;
                    upper = c;
                }

                List <BinaryStringTreeNode> lst = new List <BinaryStringTreeNode>();
                while (queue.Count > 0)
                {
                    BinaryStringTreeNode node = queue.Dequeue();
                    node.left = new BinaryStringTreeNode(node.val + lower.ToString());
                    lst.Add(node.left);
                    if (lower != upper)
                    {
                        node.right = new BinaryStringTreeNode(node.val + upper.ToString());
                        lst.Add(node.right);
                    }
                }
                foreach (var node in lst)
                {
                    queue.Enqueue(node);
                }
                lst.Clear();
            }

            List <string> res = new List <string>();

            while (queue.Count > 0)
            {
                res.Add(queue.Dequeue().val);
            }
            res.Sort();
            return(res);
        }
Ejemplo n.º 2
0
 public BinaryStringTreeNode(string val)
 {
     this.val = val;
     left     = null;
     right    = null;
 }