2012-10-28 59 views
0

我正在使用Ruby,需要以某種方式生成給定數字中數字的所有排列並將它們存儲在數組中。因此,例如我有號碼n = 9431,我需要生成所有可能的方式,您可以訂購這四個數字並將它們存儲在一個數組中(原始數據可以在數組中)。生成給定數字的數字的所有排列?

所以,如果我輸入9431我需要一個數組回來的東西,如:

[9413, 9431, 9143, 9134, 9314, 9341, 4913, 4931, 4193, 4139, 4319, 4391, 1493, 1439, 1943, 1934, 1394, 1349, 3419, 3491, 3149, 3194, 3914, 3941] 

使用字符串是好的實際。

說明:哦,輸出必須是數組中的整數,而不是它們的個別數字。

+0

爲什麼你不想使用字符串? –

+0

你想在列表中重新分配嗎?所以如果你的號碼是'2222',你的陣列是否有一個元素或4!? –

+0

@AmitKumarGupta,其實這是不切實際的,我現在更新我的功能,並沒有問題。 – Annabelle

回答

2

這是「欺騙」,因爲它使用了你不想做中間字符串,但它的工作原理:

9431.to_s.chars.to_a.permutation.map(&:join).map(&:to_i).uniq 
=> [9431, 9413, 9341, 9314, 9143, 9134, 4931, 4913, 4391, 4319, 4193, 
    4139, 3941, 3914, 3491, 3419, 3194, 3149, 1943, 1934, 1493, 1439, 
    1394, 1349] 
+0

這很好,非常酷謝謝! – Annabelle

+0

你可以改變它沒有重複,就像我有9433,它打印9433兩次,而不是一次。 – Annabelle

+0

@Link - 是的。簡單:)只需在最後添加一個對'uniq'的調用。請參閱編輯。 – Casper

1

您可以迭代,使用除法和/或模數10來獲取單個數字作爲列表。

您可以使用列表排列,以獲得不同的排列,如:

irb(main):015:0> elts = [9,4,3,1].permutation.to_a 
=> [[9, 4, 3, 1], [9, 4, 1, 3], [9, 3, 4, 1], [9, 3, 1, 4], [9, 1, 4, 3], [9, 1, 3, 4], [4, 9, 3, 1], [4, 9, 1, 3], [4, 3, 9, 1], [4, 3, 1, 9], [4, 1, 9, 3], [4, 1, 3, 9], [3, 9, 4, 1], [3, 9, 1, 4], [3, 4, 9, 1], [3, 4, 1, 9], [3, 1, 9, 4], [3, 1, 4, 9], [1, 9, 4, 3], [1, 9, 3, 4], [1, 4, 9, 3], [1, 4, 3, 9], [1, 3, 9, 4], [1, 3, 4, 9]] 
irb(main):016:0> elts.each{ |x| puts x.join } 
9431 
9413 
9341 
9314 
9143 
9134 
4931 
4913 
4391 
4319 
4193 
4139 
3941 
3914 
3491 
3419 
3194 
3149 
1943 
1934 
1493 
1439 
1394 
1349 
+0

我想到了這一點,但我需要實際上有整個數字,而不是數組中的個人數字。 – Annabelle

+0

好的,編輯包含加入的列表。 –

+0

真棒!謝謝! – Annabelle

相關問題