2016-04-21 43 views
2

我要解决的可能的三个字母的单词我怎样才能解决这个可能的三个字母词

Here is following words. (17 characters) 
19920620forestJSR 
How many possible ways to make 3 length word with given characters? 
Ex: 192, 162, Rer, …. 
Rule: 
Number 0 is different alpha o. (0 != o) 
case-sensitive is available. (R != r) 
same character repeat not available. (rr1 : wrong) 
Hint: 
17 16 15 : wrong 

这个问题,我怎样才能解决这个

我用这个代码

function permute($str,$i,$n) { 
    if ($i == $n) 
     print "$str\n"; 
    else { 
     for ($j = $i; $j < $n; $j++) { 
      swap($str,$i,$j); 
      permute($str, $i+1, $n); 
      swap($str,$i,$j); // backtrack. 
     } 
    } 
} 


function swap(&$str,$i,$j) { 
    $temp = $str[$i]; 
    $str[$i] = $str[$j]; 
    $str[$j] = $temp; 
} 

$str='19920620forestJSR'; 
permute($str,0,strlen($str)); 
尝试

但在输出具有一定的误差与数字字符

输出的样子(当STR = 199206 20forestJSR)

n���Z��뢿�Yh��fzj+�ȳz��ߍ�シo+^��aj�-y�k��m��e�ƭ{�6�ټ�zȧo�h���j���Z�ǫ���������z�a���X�y����� 

输出的样子(当海峡= forestJSR)

foresSJtR 
foresSJRt 
foresStJR 
foresStRJ 
foresSRtJ 
foresSRJt 
foresRJSt 
foresRJtS 

回答

1

规则说,你需要的字符,内部消除重复字母的组合。您的代码正在生成17个字母的所有组合。因此,该脚本循环了数百万次可能性(355,687,428,096,000)。

n个不同对象的排列的数量,一次取r是

nPr = n!/(n - r)! 

因此,对于 “19920620forestJSR”(仅14个不同的字母),在时间使用3:

14P3 = 14!/(14 - 3)! = 14!/11! = (14)(13)(12) = 2184