在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
算法描述:如果用P表示n个元素的全排列,而Pi表示n个元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前缀i的排列,那么n个元素的全排列可递归定义为: 1、 1 <?php 2 function rank($base, $temp=null) 3 { 4 $len = strlen($base); 5 if($len <= 1) 6 { 7 echo $temp.$base.'<br/>'; 8 } 9 else 10 { 11 for($i=0; $i< $len; ++$i) 12 { 13 rank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]); 14 } 15 } 16 } 17 rank('123'); 不过,这样的算法有个问题:若是存在相同的元素,则全排列有重复。例如'122'的全排列只有三种情况:'122'、'212'、'221';上面方法却有重复。 2、在上面算法的基础上价格判重操作即可 1 <?php 2 function fsRank($base, $temp=null) 3 { 4 static $ret = array(); 5 $len = strlen($base); 6 if($len <= 1) 7 { 8 //echo $temp.$base.'<br/>'; 9 $ret[] = $temp.$base; 10 } 11 else 12 { 13 for($i=0; $i< $len; ++$i) 14 { 15 $had_flag = false; 16 for($j=0; $j<$i; ++$j) 17 { 18 if($base[$i] == $base[$j]) 19 { 20 $had_flag = true; 21 break; 22 } 23 } 24 if($had_flag) 25 { 26 continue; 27 } 28 fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]); 29 } 30 } 31 return $ret; 32 } 33 print '<pre>'; 34 print_r(fsRank('122')); 35 print '</pre>'; 36 ?>
|
2022-08-30
2022-08-17
2022-11-06
2022-08-17
2022-08-16
请发表评论