重複の可能性:
PHPで文字列のすべての順列を生成する方法は?
この入力を受け取るphpでスクリプトを作成したいと思います。
12a
そして、次のような結果を出力します。
1, 2, a, 12, 1a, 21, 2a, a1, a2, 12a, 1a2, 21a, 2a1.
調査を行いましたが、これを実行するスクリプトが見つかりません。
重複の可能性:
PHPで文字列のすべての順列を生成する方法は?
この入力を受け取るphpでスクリプトを作成したいと思います。
12a
そして、次のような結果を出力します。
1, 2, a, 12, 1a, 21, 2a, a1, a2, 12a, 1a2, 21a, 2a1.
調査を行いましたが、これを実行するスクリプトが見つかりません。
これがこの回答から変更された関数です
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 to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}
$str = "12a";
$len = strlen($str);
for($i =0; $i <= $len; $i++) {
permute($str,0,$i + 1); // call the function.
}
出力セットが明確に定義されていないため、これは完全ではありません。まず、出力セットがどのように見えるかを理解してから、開始する方法として以下を使用します。
<?php
$input = "12a";
$input_array = str_split($input, 1);//get an array of each individual character
$max_length = strlen($input);
$length = 01;
$result = array();
foreach($input_array as $character) {
$result[] = $character;
}
while ($length < $max_length){
foreach($result as $substring) {
foreach($input_array as $character) {
$result[] = $substring.$character;
}
}
$length++;
}
foreach ($result as $result_string) {
echo $result_string.", ";
}
注意として、一般に、これらの種類のアルゴリズムは「動的計画法」を利用します。