我最近解决了一个问题,它需要一个3-4位数字,例如1234(以及一些更大的数字),并返回一个排序数组,其中包含所有可能的permutations数字{ {1}}
我不喜欢我的解决方案,因为它使用了时间来将数字添加到数组中,因此仍然容易犯错,而且更难看。有没有一种方法可以将数字添加到数组中完美的次数,这样一旦达到所有可能的数字混乱,程序将停止并返回数组?
[1234, 1432, 4213, 2431, 3412, 3214, etc.]
答案 0 :(得分:4)
使用Array#permutation
执行以下操作:
>> a = 1234.to_s.chars
=> ["1", "2", "3", "4"]
>> a.permutation(4).to_a
=> [["1", "2", "3", "4"],
["1", "2", "4", "3"],
["1", "3", "2", "4"],
["1", "3", "4", "2"],
["1", "4", "2", "3"],
["1", "4", "3", "2"],
["2", "1", "3", "4"],
["2", "1", "4", "3"],...]
您修改后的方法将是:
def number_shuffle(number,size)
number.to_s.chars.permutation(size).to_a
end
答案 1 :(得分:1)
对于您的方法,它将是:
def number_shuffle(number)
a = number.to_s.chars
a.permutation(a.size).to_a.map { |b| b.join.to_i }
end
p number_shuffle 123 # => [123, 132, 213, 231, 312, 321]