[Thuật toán nhỏ] Liệt kê hoán vị 1 chuỗi số

  • Input: Chuỗi kí tự k = ‘a,b,c,…’
  • Output: Các hoán vị của k
    PHP code:
function hoanvi( $dayso )
{
	$p      = ',';
	$dayso  = is_array( $dayso ) ? $dayso : explode( $p, $dayso );
	if( count( $dayso ) == 1 )
	{
		$result = $dayso;
	} 
	elseif( count( $dayso ) == 2 )
	{
		$result = [ $dayso[0] . $p . $dayso[1], $dayso[1] . $p . $dayso[0]];
	} 
	else
	{
		foreach( $dayso as $k      => $v )
		{
			unset( $dayso[ $k ] );
			$dayso1 = array_values( $dayso );
			foreach( hoanvi( $dayso1 ) as $val )
			{
				$result[]        = $v . $p . $val;
			}
			$dayso[ $k ]        = $v;
		}
	}
	return $result;
}
echo 'Total: '. count($hv = hoanvi($_REQUEST['dayso'])).'<br><br>';
echo join('<br>', $hv);

Run: hoanvi.php?dayso=a,b,c,d

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?