日期:2014-05-17 浏览次数:21000 次
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string s = "12345"; List<string> list = new List<string>(); foreach (var i in Combo(s, 3)) { list = list.Union(Arrange(i)).ToList(); } Console.WriteLine("count: " + list.Count); list.ForEach(x => Console.WriteLine(x)); } static IEnumerable<string> Arrange(string source) { for (int i = 0; i < source.Length; i++) { if (source.Length == 1) { yield return source; } else { foreach (var x in Arrange(source.Substring(0, i) + source.Substring(i + 1))) { yield return source[i] + x; } } } } static IEnumerable<string> Combo(string source, int len) { int[] pos = new int[len]; for (int i = 0; i < len; i++) pos[i] = i; while (pos[0] < source.Length - len) { string str = ""; for (int i = 0; i < len; i++) str += source[pos[i]]; for (int i = len - 1; i >= 0; i--) { if (pos[i] < source.Length - len + i) { pos[i]++; for (int j = i + 1; j <= len - 1; j++) { pos[j] = pos[i] + j - i; } break; } else { continue; } } yield return str; } yield return source.Substring(source.Length - len); } } }