排列组合
假设:1,2,3,4,5 五个数字选3组合
我只会得到 123,124,125,134,135,145,234,235,245,345的10种组合
那把这10个组合再排列
比如: 123 得到321、312、213、231,132,123六个组合
245 得到524、542、425、452、254、245六个组合
... ...
10*6 = 60个
谢谢
[解决办法]
- C# code
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); } }}