문제

세트 [0 ... (N-1)에서 길이 R의 모든 조합을 생성하고 싶습니다.

그래서 출력은 다음과 같아야합니다 (n = 6 r = 2)

$res = array(array(0,1),array(0,2),array(0,3),array(0,4),array(0,5),array(1,2),array(1,3),array(1,4),array(1,5),array(2,3),array(2,4),array(2,5),array(3,4),array(3,5),array(4,5));

같은 기능으로

function permutate($select, $max)

여기서 $ select = r 및 $ max = n

이것은 나의 현재 시도이지만 내 두뇌는 오늘 저녁에 기능하는 것처럼 보이며 $ select = 2에만 작동합니다.

function permutate($select, $max)
{
    $out = array();
    for( $i = 0; $i < ($max) ; $i++)
    {
        for ($x = ($i + 1); $x < ($max); $x++)
        {

            $temp = array($i);

            for($l = 0; $l < ($select-1); $l++)
            {
                if(($x+$l) < $max )
                {                
                    array_push($temp, $x+$l);
                }
            }    
            if(count($temp) == $select)
            {
                array_push($out, $temp);
            }
        }
    }

    return $out;
}

미리 감사드립니다

도움이 되었습니까?

해결책

정의되지 않은 수의 루프가 필요하므로 재귀 적으로 수행해야합니다.

function permutation($select, $max) {
    if ($select === 1) {
        $result = range(0, $max);
        foreach ($result as &$entry) {
            $entry = array($entry);
        }
        return $result;
    }
    $result = array();
    $previous = permutation($select - 1, $max - 1);
    foreach ($previous as $entry) {
        $last = end($entry);
        for ($i = $last + 1; $i <= $max; $i++) {
            $result[] = array_merge($entry, array($i));
        }
    }
    return $result;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top