2012-11-27 97 views
2

感謝您的回覆,首先我想感謝您試圖幫助我,並且我已經在幾個網站上發佈了這個帖子,也沒有人試圖幫助。排列需要幫助代碼

對於我的代碼,我希望做的是排列計數。

它將從頂部數到底部
1,2,3
1,2,3
1,2,3

output to 
111 = 1 
112 = 1 
113 = 1 
121 = 1 
122 = 1 
123 = 1 
133 = 1 
211 = 1 
212 = 1 
213 = 1 
333 = 1 

,並繼續,直到所有的號碼是計數,也存儲可以檢查多少計數的數組

代碼將檢查輸入的數字並計算結果的數量並顯示結果的結果數量以及每個結果的排列次數。

它很難做?

無論如何謝謝你的幫助。

回答

1

這不難,我想。這只是標準的排列。你需要使用一個小的遞歸:

function permute(size) { 
    var range = getRange(size); 
    var result = []; 
    getSubPerms('', range, result); 
    return result; 
}; 

function getRange(size) { 
    var range = []; 
    for (var i = 0; i < size; i++) { 
     range.push(i + 1); 
    } 
    return range; 
} 

function getSubPerms(perm, range, result) { 
    for (var i = 0; i < range.length; i++) { 
     var perm2 = perm + range[i]; 
     if (perm2.length == range.length) { 
      result.push(perm2); 
     } else { 
      getSubPerms(perm2, range, result); 
     } 
    } 
} 

var foo = permute(4); //an array of all of your results. 
alert(foo.length); //256 

不過,如果你只是在該長度的興趣,而不必產生的結果,只會是Math.pow(size, size)才能給你結果的長度。