2012-11-27 101 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)才能给你结果的长度。