2014-10-22 34 views
-8

所以我现在有这个代码,并在输入我有升序我的名字的字母“ahimrsu”。我需要为所有2170组合显示正确的“mariush”数字。现在只显示ahimrsu,ahimrus,ahimsru,ahimsur,ahimurs,ahimusr,ahirmus,ahirmsu ....等。我该怎么做这个?Java排列alghorithm

<!DOCTYPE HTML> 

<html> 
<head> 
<!--Script Function Start Here--> 
<script type="text/javascript"> 
     function perms(data) { 
    if (!(data instanceof Array)) { 
     throw new TypeError("input data must be an Array"); 
    } 

    data = data.slice(); // make a copy 
    var permutations = [], 
     stack = []; 

    function doPerm() { 
     if (data.length == 0) { 
      permutations.push(stack.slice()); 
     } 
     for (var i = 0; i < data.length; i++) { 
      var x = data.splice(i, 1); 
      stack.push(x); 
      doPerm(); 
      stack.pop(); 
      data.splice(i, 0, x); 
     } 
    } 

    doPerm(); 
    return permutations; 
} 

var input = "ahimrsu".split(''); 
var result = perms(input); 
for (var i = 0; i < result.length; i++) { 
    result[i] = result[i].join(''); 
} 
console.log(result); 
</script> 
<!--Header start here--> 
</head> 
<body> 
<!--Script Result--> 
<script type="text/javascript"> 
    document.write(result); 
</script> 

</body> 
</html> 
+1

你到目前为止做了什么? – ToYonos 2014-10-22 08:11:22

+0

我建议你阅读一般的变化和排列。 – JBA 2014-10-22 08:12:22

+1

这个公式是'factorial(str.length)'。 – dfsq 2014-10-22 08:12:25

回答

0

你的问题是数学性质 - 组合和排列组合。实际上,您正在询问字符串长度为7的可能排列数。 公式为阶乘(numOfchar)。

In this case 7! = 7x6x5x4x3x2x1 = 5040.

public static void main(String[] args) { 

    String str = "ABCDEFH"; 

    System.out.println("Number of permutations for " + str + " is : " + factorial(str.length())); 
} 


public static int factorial(int n) 
{ 
    if (n == 0) 
     return 1; 

    int result = factorial(n-1)*n; 
    return result; 
} 

程序的输出:

Number of permutations for ABCDEFH is : 5040

既然你标记Java,这是你能得到它与J​​ava做的一种方式。

+0

我标记JAVA,因为我需要在JAVA中做它谢谢你的回答 – 2014-10-22 08:37:37