查看完整版本: 贴一段代码,求n个数字中取k个数字的组合方式

bbschat 2008-4-30 18:28

贴一段代码,求n个数字中取k个数字的组合方式

递归的力量,简洁!

思考方式

1 - 7 里面取 3 个数字的结果 = 1 - 6 个数字里面取 3 个数字的结果 + (1 - 6 个数字里面取 2 个数字的每个结果和 7 组合)[code]def choose(n, k)
  return [[]] if k == 0
  return [] if n == 0
  return choose(n - 1, k) + choose(n - 1, k - 1).map {|ls| ls << n}
end[/code]p choose(7,3).sort

[[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 2, 7], [1, 3, 4], [1, 3, 5], [1, 3, 6], [1, 3, 7], [1, 4, 5], [1, 4, 6], [1, 4, 7], [1, 5, 6], [1, 5, 7], [1, 6, 7], [2, 3, 4], [2, 3, 5], [2, 3, 6], [2, 3, 7], [2, 4, 5], [2, 4, 6], [2, 4, 7], [2, 5, 6], [2, 5, 7], [2, 6, 7], [3, 4, 5], [3, 4, 6], [3, 4, 7], [3, 5, 6], [3, 5, 7], [3, 6, 7], [4, 5, 6], [4, 5, 7], [4, 6, 7], [5, 6, 7]]

PS:Ruby 1.9 的数组Array自带的combination方法可以实现相同的功能,没装1.9,不知道和效率会差多少。

[[i] 本帖最后由 bbschat 于 2008-5-4 10:13 编辑 [/i]]

xavier 2008-4-30 18:37

似乎名字叫做combination更贴切一些

bbschat 2008-4-30 19:11

combination在ruby 1.9里面不是已经有了?
安全起见还是不叫这个名字了。:lol

xavier 2008-4-30 19:16

ruby1.9里的是Array#combination
数组的实例方法

bbschat 2008-5-4 10:04

代码再次精简,只剩5行,关键程序只有一行。
个人习惯取函数名尽量简短而不重复。
叫啥其实随意~~
页: [1]
查看完整版本: 贴一段代码,求n个数字中取k个数字的组合方式