using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication32 { class Program { static int s = 0; static void Main(string[] args) { string strs = "12345"; List<string> list = new List<string>(); Compute(strs, "",list); for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } Console.WriteLine(s); Console.Read(); } /// <summary> /// 数学排列 /// </summary> /// <param name="num"></param> /// <param name="curnum"></param> public static void Compute( string num,string curnum,List<string> list) { for (int i = 0; i < num.Length; i++) { curnum+= num[i].ToString(); if (num.Length == 1) { list.Add(curnum); s++; } else { string temp=num.Replace(num[i].ToString(),""); Compute(temp,curnum,list); curnum= curnum.Remove(curnum.Length - 1, 1); } } } } } 昨天在JAVA区看到一个类似求数学组合的算法问题,想了想还挺难,没什么思路,随便搜了一下,还真有专门算这个算法,是用“回溯法”,今天下午没事,就自己写了个算法,实现了P(R,R)的排列问题,组合回来再写吧