大威天龙(打印字符串所对应的字符所有排列组合)

打印字符串所对应的字符所有排列组合

将数字与对应的字符数组写进字典里,这里使用广度优先遍历BFS,那就得用队列,之后用个列表去接这些组合,list是动态的,不会被限制长度,队列储存string类型

大威天龙
    public class PhoneNumber
    {
        //大威天龙
        public static List<string> Fahai(string digits)
        {
            Dictionary<char,char[]> dict=new Dictionary<char, char[]>()
            {
                {'2',new char[]{'a','b','c'}},
                {'3',new char[]{'d','e','f'}},
                {'4',new char[]{'g','h','i'}},
                {'5',new char[]{'j','k','l'}},
                {'6',new char[]{'m','n','o'}},
                {'7',new char[]{'p','q','r','s'}},
                {'8',new char[]{'t','u','v'}},
                {'9',new char[]{'w','x','y','z'}}
            };
            var result=new List<string>();
            if(string.IsNullOrEmpty(digits)) return result;
            var q=new Queue<String>();
            q.Enqueue(string.Empty);
            while(q.Count>0)
            {
                var cur=q.Dequeue();
                if(cur.Length==digits.Length)
                {
                    result.Add(cur);
                }
                else
                {
                    foreach (var c in dict[digits[cur.Length]])
                    {
                        q.Enqueue(cur+c);
                    }
                }
            }
            return result;
        }
    }
主方法体
        string phoneNumber="45689";
        var result=PhoneNumber.Fahai(phoneNumber);
        File.WriteAllLines(@"E:\study\study.txt",result);

除开用字典来索引,也可以使用数组来存储

数组方法
    public class NewPhoneNumber
    {
        public static List<string> Fahai(string digits)
        {
            string[] str=new string[]{null,null,"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
            var result=new List<string>();
            if(digits==null) return result;
            Queue<string> q=new Queue<string>();
            q.Enqueue(string.Empty);
            while(q.Count>0)
            {
                var c=q.Dequeue();
                if(c.Length==digits.Length)
                {
                    result.Add(c);
                }
                else
                {
                    foreach (var v in str[digits[c.Length]-'0'])
                    {
                        q.Enqueue(c+v);
                    }
                }
            }
            return result;
        }
    }
posted @ 2022-02-14 17:07  Ariaaaaa  阅读(7)  评论(0)    收藏  举报