字符组数的不反复组合方法

字符组数的不重复组合方法
字符组数的不重复组合方法
namespace KeyWordSplit
{
    class Program
    {

        private static string[] KeyWord { get; set; }

        public static void Main(string[] args)
        {
            KeyWord = new string[] { "我", "是", "你", "老", "板" };
            foreach (string str in GetKeyWordCollection())
            {
                Console.WriteLine(str);
            }
            Console.ReadLine();
        }

        private static List<string> GetKeyWordCollection()
        {
            List<String> result = new List<string>();
            string index = CharArrayToString(new char[KeyWord.Length]);
            while (true)
            {
                List<string> tmp = new List<string>();
                index = CalculationNextKeyWord(index);
                if (Convert.ToInt32(index) == 0) break;
                char[] ch = index.ToString().ToCharArray();
                for (int i = 0; i < ch.Length; i++)
                {
                    if (!tmp.Contains(KeyWord[Convert.ToInt32(ch[i].ToString())]))
                        tmp.Add(KeyWord[Convert.ToInt32(ch[i].ToString())]);
                    else
                    {
                        tmp = null;
                        break;
                    }
                }
                if (tmp != null)
                    result.Add(ListToString(tmp));
            }
            return result;
        }

        private static string CalculationNextKeyWord(string keyWordIndex)
        {
            char[] keyWordArr = keyWordIndex.ToCharArray();
            int index = keyWordArr.Length;
            while (index-- > 0)
            {
                int num = Convert.ToInt32(keyWordArr[index].ToString());
                if (num + 1 >= keyWordArr.Length)
                {
                    keyWordArr[index] = '0';
                    continue;
                }
                else
                {
                    int current = Convert.ToInt32(keyWordArr[index].ToString());
                    keyWordArr[index] = (current + 1).ToString().ToCharArray()[0];
                    break;
                }
            }
            return CharArrayToString(keyWordArr);
        }

        private static string ListToString(List<string> array)
        {
            StringBuilder sb = new StringBuilder();
            foreach (string str in array)
            {
                sb.Append(str);
            }
            return sb.ToString();

        }

        private static string CharArrayToString(char[] array)
        {
            StringBuilder sb = new StringBuilder();
            foreach (char ch in array)
            {
                if (ch == 0)
                    sb.Append("0");
                else
                    sb.Append(ch.ToString());
            }
            return sb.ToString();
        }
    }
}