function fun($str)
{
$all = factorial(iconv_strlen($str));
$out = array($str);
for ($i = 1; $i < $all; ++$i) {
$tmp = str_shuffle($str);
while (true) {
if (array_search($tmp, $out) === false) {
$out[$i] = $tmp;
break;
}
$tmp = str_shuffle($tmp);
}
}
return $out;
}
function factorial($n)
{
return ($n <= 1) ? 1 : $n * factorial($n - 1);
}
print_r(fun(123));
но не обрабатываются ситуации в случае если в строке имеются повторяющиеся символы. M0rbid - решение?)
что значит "элемент случайности плох" - она как бы есть или ее как бы нет, третьего тут не дано)
а про решение - это не вопрос, а просьба выложить нормальное решение задачи. а то что этот вариант не оптимален эт понятно.
Gemorroj, значит "плохо что она есть".
рекурсивный вариант:
function func($str, $pref = '')
{
if($str == '')
{
echo $pref.' ';
return;
}
$length = strlen($str);
$arr = str_split($str);
for($i = 0; $i < $length; $i++)
{
$arr2 = $arr; unset($arr2[$i]);
$str2 = implode('', $arr2);
func($str2, $pref.$str[$i]);
}
}
func('абв');
//абв авб бав бва ваб вба