是否可以创建一些Linq来生成包含一系列数字的所有可能组合的List?
如果输入“ 21”,它将生成一个包含以下元素的列表:
list[0] = "21" list[1] = "22" list[2] = "11" list[3] = "12"
(不一定按该顺序)
我了解您可以使用范围来执行以下操作:
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
从az生成字母。但是我似乎无法将这些知识转移到一个组合生成器中
我已经可以使用以下代码来解决这个问题,但是它看起来实在太笨重了,我相信只需几行就可以完成。我确实觉得这是一个糟糕的解决方案。
想象一下我打电话给您GetAllCombinations("4321")是否有帮助
GetAllCombinations("4321")
public static String[] GetAllCombinations(String s) { var combinations = new string[PossibleCombinations(s.Length)]; int n = PossibleCombinations(s.Length - 1); for (int i = 0; i < s.Length; i++) { String sub; String[] subs; if (i == 0) { sub = s.Substring(1); //Get the first number } else if (i == s.Length - 1) { sub = s.Substring(0, s.Length - 1); } else { sub = s.Substring(0, i) + s.Substring(i + 1); } subs = GetAllCombinations(sub); for (int j = 0; j < subs.Length; j++) { combinations[i * n + j] = s[i] + subs[j]; } } return combinations; } public static int PossibleCombinations(int n) //Combination possibilities. e.g 1-2-3-4 have 24 different combinations { int result = 1; for (int i = 1; i <= n; i++) result *= i; return result; }
为了它的价值,尝试这样的事情:
public static IEnumerable<string> GetPermutations(string s) { if (s.Length > 1) return from ch in s from permutation in GetPermutations(s.Remove(s.IndexOf(ch), 1)) select string.Format("{0}{1}", ch, permutation); else return new string[] { s }; }