給定數字n=1、2、3、4、5、6。
我想生成一個嵌套數組S,該數組將包含n的所有可能的4位組合。由于6^4=1296,因此將有1296個可能的組合。
示例:S=[[1,1,1,1],[1,1,1,2],[1,1,2,2]...[6,6,6,6]]
我用值為[1,1,1,1]的第一個索引開始嵌套循環,然后使用范圍為0..1295的for in循環,并嘗試將S[I]的值帶入S[I+1],然后增加S[I+1][x]的值,其中x總是從3開始,然后遞減,直到達到0,然后再次變為3。我的過程的問題是,當我試圖增加S[i+1][x]時,S[i]也會增加其S[i][x]。在下面的代碼中,S被稱為'all_possible_combinations'
all_possible_combinations = Array.new(1296) {Array.new(4)}
all_possible_combinations[0] = [1, 1 ,1 ,1]
x = 3
for i in 0..1295
if i + 1 == 1296
break
else
all_possible_combinations[i+1] = all_possible_combinations[i]
all_possible_combinations[i+1][x] += 1
x -= 1
if x == 0
x = 3
end
end
end
[附圖顯示了調試過程,其中Si][x]也會增加
可以按如下方式計算該數組。
See Array#repeated_permutation
如果數組
a
可能包含重復項,并且您希望刪除重復排列,那么您可能希望附加數組#uniq。