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]]
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行,关键程序只有一行。
个人习惯取函数名尽量简短而不重复。
叫啥其实随意~~