我正在完成Ruby Monk的Ruby Primer问题。
问题陈述:给定一个由不同数字组成的3位或4位数,返回一个排序后的数组,其中包含使用这些数字可以形成的所有唯一数字。例如:给定:123 返回:[123, 132, 213, 231, 312, 321]
我认为Array#combination方法可以解决问题。我的代码看起来像这样:
def number_shuffle(number)
# take integer and turn it into an array of digits
digits = Array.new
number.to_s.split('').each do |element|
digits << element.to_i
end
# shuffle the elements
return digits.combination(digits.length).to_a
end
puts number_shuffle(123)
但是上面的代码返回:
1
2
3
我不确定在这里做错了什么,我认为文档已经很清楚了:
http://www.ruby-doc.org/core-2.2.0/Array.html#method-i-combination
欢迎任何帮助。
number = 123
,你计算[1,2,3].combination(3).to_a => [[1,2,3]]
并且puts [[1,2,3]]
会在连续的行上打印1
,2
和3
。相比之下,p [[1,2,3]]
打印[[1, 2, 3]]
在一行上。你得到这个结果是因为每个数组a
只有一个大小为a.size
的组合,即a
,所以返回[a]
。另一方面,[1,2,3].combination(1).to_a => [[1], [2], [3]]
和[1,2,3].combination(2) => [[1, 2], [1, 3], [2, 3]]
。我认为你知道需要使用permutation
而不是combination
。 - Cary Swoveland