>  기사  >  백엔드 개발  >  PHP 완전 배열 재귀 알고리즘 코드

PHP 완전 배열 재귀 알고리즘 코드

高洛峰
高洛峰원래의
2016-12-01 14:55:481273검색

알고리즘 원리

P가 n 원소의 완전한 배열을 나타내고, Pi가 i 원소를 포함하지 않는 n 원소의 완전한 배열을 나타낸다면, (i) Pi는 앞에 접두사 i를 추가하는 것을 의미합니다. Pi 배열의 경우 n 요소의 전체 배열은 다음과 같이 재귀적으로 정의될 수 있습니다.
① n=1이면 배열 P는 단 하나의 요소 i를 갖습니다.
정의에 따르면 다음과 같습니다. (k-1)개의 요소 배열 Pi가 생성된 경우, 각 Pi 앞에 요소 i를 추가하면 k개의 요소 배열이 생성될 수 있음을 알 수 있습니다.
코드 구현
코드 복사 코드는 다음과 같습니다.
함수 순위($base, $temp=null)
{
$len = strlen($base);
if ($len <= 1)
{
echo $temp.$base.'
';
}
else
{
for($i =0; $i< $len; ++$i)
{
순위(substr($base, 0, $i).substr($base, $i+1, $len-$i- 1), $temp.$base[$i]);
}
}
}
rank('123');

그러나 여러 번의 테스트 실행 끝에 질문: 동일한 요소가 있으면 전체 배열이 반복됩니다.
예를 들어 '122'의 전체 배열에는 '122', '212', '221' 세 가지 상황만 있지만 위의 방법이 반복됩니다.
약간 수정, 중복 감지 플래그 추가, 문제 해결(코드는 다음과 같습니다):
코드 복사 코드는 다음과 같습니다:
function fsRank($base, $temp=null)
{
static $ret = array();
$len = strlen($base);
if($len <= 1)
{
//echo $ temp.$base.'< ;br/>';
$ret[] = $temp.$base;
}
else
{
for($i=0; $i< + +$i)
                                        $had_flag                                                                           [$ i] == $base[$j])
                                               ~                                                              ( > 계속;
}
fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i ]);
}
}
$ret 반환 ;
}
인쇄 '

';<br>print_r(fsRank('122'));<br>인쇄 '
';

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.