解讀php全排列遞歸算法代碼
php全排列遞歸算法代碼,需要的朋友可以參考下,就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!
算法原理
如果用P表示n個元素的`全排列,而Pi表示n個元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前綴i的排列,那麼n個元素的全排列可遞歸定義爲:
① 如果n=1,則排列P只有一個元素i;
② 如果n>1,則全排列P由排列(i)Pi構成;
根據定義,可以看出如果已經生成(k-1)個元素的排列Pi,那麼k個元素的排列可以在每個Pi前面加上元素i而生成。
代碼實現
複製代碼 代碼如下:
function rank($base, $temp=null)
{
$len = strlen($base);
if($len <= 1)
{
echo $temp.$base.'<br/>';
}
else
{
for($i=0; $i< $len; ++$i)
{
rank(substr($base, 0, $i)tr($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< $len; ++$i)
{
$had_flag = false;
for($j=0; $j<$i; ++$j)
{
if($base[$i] == $base[$j])
{
$had_flag = true;
break;
}
}
if($had_flag)
{
continue;
}
fsRank(substr($base, 0, $i)tr($base, $i+1, $len-$i-1), $temp.$base[$i]);
}
}
return $ret;
}
print '<pre>';
print_r(fsRank('122'));
print '</pre>';
相關文章
-
php遞歸創建和刪除文件夾的代碼
php中遞歸創建和刪除文件夾的代碼,供大家學習參考。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網! 方法一複製代碼 代碼如下:<?php/*** 目錄生成類 :UtilsMakeDir* @author yepe -
PHP使用遞歸算法無限遍歷數組示例
章主要介紹了PHP使用遞歸算法無限遍歷數組,結合實例形式分析了php針對一維數組、二維數組及多維不規則數組的'通用遍歷技巧,需要的朋友可以參考下.本文實例講述了PHP使用遞歸算法無限遍歷數組。分享給大家供大家參考 -
php和javascript之間變量的傳遞實現代碼
本例是PHP和javascript交互的例子,php中的值賦給js變量中,前提是這個php變量必須有值才行,就算是假分支中。比如php中的$flags在本例中爲true,如果js中false語句寫成:$title_rHTML = "";就會出錯,因爲$title在php中被賦值爲 -
關於PHP實現數組隊列的複製代碼
複製代碼 代碼如下:<?php$zhan=array("WEB");//聲明一個數組當做隊列array_push($zhan,"PHP");//將字符串壓入棧(數組)中array_push($zhan,"");//再壓入一個元素print_r($zhan);//打印數組內容?><?php$zhan=array("WEB" -
php下通過僞造http頭破解防盜鏈的代碼
文章主要用於圖片,軟件等突破防盜鏈的方法,希望需要的朋友有所幫助,但不推薦這樣做,如果官方改版都是無法繼續使用的。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!僞造referer實例代 -
php一個解析字符串排列數組的方法
主要介紹了php一個解析字符串排列數組的方法,可實現字符串的.拆分與排列功能,具有一定參考借鑑價值,需要的朋友可以參考下.本文實例講述了php一個解析字符串排列數組的方法。分享給大家供大家參考。具體如下:<?php$str -
PHP讀取MySQL數據代碼方法
配置好了PHP環境,接下來,我們要正式開始對數據庫進行操作了!首先是讀取MySQL中的數據。記得我們之前是怎麼連接MySQL數據庫的麼?新建文件,其內容爲:複製代碼 代碼如下:<?php$link=mysql_connect("localhost","root","之前的 -
php中使用redis隊列操作實例代碼
php中使用redis隊列怎麼操作?小編爲大家介紹一個php使用redis隊列操作的例子,供初學redis的朋友參考吧。 例1,入隊操作:複製代碼 代碼如下:<?php$redis = new Redis();$redis->connect('',6379);while(True){t -
如何實現PHP靜態新聞列表自動生成代碼
在生活、工作和學習中,大家或多或少都會接觸過作文吧,藉助作文人們可以反映客觀事物、表達思想感情、傳遞知識信息。作文的注意事項有許多,你確定會寫嗎?以下是小編爲大家收集的游龍門石窟作文,希望能夠幫助到大家。游龍門 -
解讀PHP頁面編碼聲明方法
PHP 頁面編碼聲明與用header或meta實現PHP頁面編碼的區別有哪些?就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!php的header來定義一個php頁面爲utf編碼或GBK編碼php頁面爲utf編碼he