让我们说我有一个字母数字刺痛
$string = 'abcdefghijklmnopqrstuvwxyz012345678';
上述字符串中的字符可以通过多种方式排列,只需切换其中两个或多个的位置即可。
我似乎无法找到一种数学方法来编写可以安排给定字符串集合的所有可能方式。
我从这开始:
<?php
//Get the length of the string
$length = strlen($string);
//Create an empty array that will store each character
$chars = array();
for($i=0;$i<$length;$i++) {
//Get each letter
$part = substr($string, $i, 1);
array_push($chars, $part);
}
for($i=0;$i<count($chars);$i++) {
$current = $chars[$i];
}
我让作家们阻止解决这个难题。看起来很容易想象,但我似乎无法在文本编辑器中代表它。
答案 0 :(得分:0)
这是逻辑。 参考Permutate a string
<?php
function allString($string, $initial, $length){
if($initial == $length){
echo $string. "</br>";
}else{
for ($next=$initial; $next < $length ; $next++) {
swap($string, $initial, $next);
allString($string, $initial+1, $length);
swap($string, $initial, $next);// backtrack
}
}
}
function swap(&$string, $initial, $next){
$temp = $string[$initial];
$string[$initial] = $string[$next];
$string[$next] = $temp;
}
$string = "ABC";
allString($string, 0, strlen($string));
?>
这说明了字符串的排列。它使用 Backtrack方法。我想你也在寻找同样的东西。