猿问

如何在PHP中生成字符串的所有排列?

如何在PHP中生成字符串的所有排列?

我需要一个算法,它返回一个字符串中所有字符的所有可能组合。

我试过了:

$langd = strlen($input);
 for($i = 0;$i < $langd; $i++){
     $tempStrang = NULL;
     $tempStrang .= substr($input, $i, 1);
  for($j = $i+1, $k=0; $k < $langd; $k++, $j++){
   if($j > $langd) $j = 0;
   $tempStrang .= substr($input, $j, 1);
 }
 $myarray[] = $tempStrang;}

但是,它只返回与字符串长度相同的数量组合。

$input = "hey",结果将是:hey, hye, eyh, ehy, yhe, yeh


杨__羊羊
浏览 830回答 3
3回答

梵蒂冈之花

您可以使用基于反向跟踪的方法系统地生成所有排列://&nbsp;function&nbsp;to&nbsp;generate&nbsp;and&nbsp;print&nbsp;all&nbsp;N!&nbsp;permutations&nbsp;of&nbsp;$str.&nbsp;(N&nbsp;=&nbsp;strlen($str)).function&nbsp;permute($str,$i,$n)&nbsp;{ &nbsp;&nbsp;&nbsp;if&nbsp;($i&nbsp;==&nbsp;$n) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;"$str\n"; &nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($j&nbsp;=&nbsp;$i;&nbsp;$j&nbsp;<&nbsp;$n;&nbsp;$j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap($str,$i,$j); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permute($str,&nbsp;$i+1,&nbsp;$n); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap($str,$i,$j);&nbsp;//&nbsp;backtrack. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;}}//&nbsp;function&nbsp;to&nbsp;swap&nbsp;the&nbsp;char&nbsp;at&nbsp;pos&nbsp;$i&nbsp;and&nbsp;$j&nbsp;of&nbsp;$str.function&nbsp;swap(&$str,$i,$j)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$temp&nbsp;=&nbsp;$str[$i]; &nbsp;&nbsp;&nbsp;&nbsp;$str[$i]&nbsp;=&nbsp;$str[$j]; &nbsp;&nbsp;&nbsp;&nbsp;$str[$j]&nbsp;=&nbsp;$temp;}&nbsp;&nbsp;&nbsp;$str&nbsp;=&nbsp;"hey";permute($str,0,strlen($str));&nbsp;//&nbsp;call&nbsp;the&nbsp;function.输出:#php&nbsp;a.phphey hye ehy eyh yeh yhe
随时随地看视频慕课网APP
我要回答