2014-10-22 3 views
-8

Итак, у меня есть этот код сейчас, и на входе у меня есть в порядке возрастания буквы моего имени «ahimrsu». Мне нужно показать правильный номер для «марихуа» из всех комбинаций, которые должны быть 2170. На данный момент это только показывает 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

+0

Я рекомендую вам прочитать об изменениях и перестановках в целом. – JBA

+1

Формула 'factorial (str.length)'. – dfsq

ответ

0

Ваш вопрос о природе математики - комбинациях и перестановках. Вы действительно запрашиваете количество возможных перестановок для длины строки 7. Формула factorial (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, это один из способов, вы можете получить это сделано с Java.

+0

Я отметил JAVA, потому что мне нужно сделать это в JAVA, спасибо за ваш ответ –