首页 > 代码库 > 组合算法实现
组合算法实现
用程序实现,找出从n个不同元素中,任取m(m≤n)个元素所有的组合。
需要用到下面的递推公式:
c(n,m)=c(n-1,m-1)+c(n-1,m)
从n个元素中选取m个元素,可以拆分成:先选取最后一个元素n,再从n-1 个元素中选取m-1 个元素,然后加上从排除n的 n-1 个元素中选取m元素。
递归实现代码:
1 public static void GetCombination(int source, int num, ref List<string> result, int[] temp = null) 2 { 3 if (temp == null) 4 { 5 temp = new int[num]; 6 } 7 if (source >= num && num >= 1) 8 { 9 temp[num - 1] = source;10 11 if (num == 1)12 {13 result.Add(string.Join(",", temp));14 }15 16 GetCombination(source - 1, num - 1, ref result, temp);17 18 if (source > num)19 {20 GetCombination(source - 1, num, ref result, temp);21 }22 23 }24 }
1 public static void GetCombination2(int source, int num, ref List<string> result, int[] temp = null) 2 { 3 if (temp == null) 4 { 5 temp = new int[num]; 6 } 7 for (int i = source; i >= num; i--) 8 { 9 temp[num - 1] = i;10 if (num > 1)11 {12 GetCombination2(i - 1, num - 1, ref result, temp);13 }14 else15 {16 result.Add(string.Join(",", temp));17 }18 }19 }
1 List<string> result = new List<string>();2 GetCombination2(5, 3, ref result);3 foreach (var a in result)4 {5 Console.WriteLine(a);6 }
组合算法实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。