自己实现了一个Ruby的组合算法,写到一半,发现Ruby的Array类支持。
class Array
def make_array
arr = []
self.each{|i| arr.insert -1, [i]}
arr
end
def make_array2(e)
self.each{|i| i.insert -1, e}
end
end
def combine(array, size)
return [ array ] if array.size == size
return array.make_array if size == 1
last = array[-1]
left = array - [ last ]
a = combine(left, size - 1).make_array2(last)
b = combine(left, size)
return a + b
end
p combine(%w{ a b c d e}, 4)
p combine(%w{ a b c d e}, 3)
p combine(%w{ a b c d e}, 2)
p combine(%w{ a b c d e}, 1)