用Ruby写的组合函数

作者: smes.test
发布时间:2015-08-10 15:42:38

求n个数字中取k个数字的组合方式递归的力量,简洁!
思考方式
1 - 7 里面取 3 个数字的结果 = 1 - 6 个数字里面取 3 个数字的结果 + (1 - 6 个数字里面取 2 个数字的每个结果和 7 组合)
def choose(n, k)return [[]] if k == 0return [] if n == 0return choose(n - 1, k) + choose(n - 1, k - 1).map {|ls| ls << n}end
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,不知道和效率会差多少。

标签: Ruby
来源:http://www.cnblogs.com/smestest/archive/2010/10/15/1852663.h

推荐: