字典序算法

背景

今天群里有人問了一個問題:?取出剛剛好大于自己的換位數(shù)(后來才知道這就是"字典序算法"),然后自己思考了一下用php簡單實現(xiàn)了一下,沒有詳細驗證,可能有bug.下面直接貼圖

實現(xiàn)

代碼

/**

* 字典序算法(取出剛剛好大于自己的換位數(shù))

* 要剛剛大于,就需要盡量保持高位數(shù)字不動,所以從低位開始遍歷

* 當?shù)臀坏臄?shù)字大于最近高位的數(shù)字,這個高位數(shù)就是需要被替換的

* 在已經(jīng)遍歷的低位數(shù)字中取出剛剛大于高位數(shù)的交換,并且把交換到低位的和剩下的全部低位數(shù)升序

* @param $number

* @return string

*/

public function getNumber($number)

{

? ? $length = strlen($number);

? ? $array = [];

? ? for ($i = $length-1; $i > 0; $i--) {

? ? ? ? //將已經(jīng)遍歷的低位數(shù)字全部放入一個臨時的數(shù)組

? ? ? ? array_push($array, $number[$i]);

? ? ? ? //當?shù)臀坏臄?shù)字大于高位的數(shù)字

? ? ? ? if ($number[$i] > $number[$i-1]) {

? ? ? ? ? ? //在低位的所有數(shù)字中取出剛好大于高位的數(shù)字

? ? ? ? ? ? $minNumber = $this->minNumber($array, $number[$i-1]);

? ? ? ? ? ? //高低位交換

? ? ? ? ? ? array_push($array, $number[$i-1]);//原來的高位數(shù)字放入低位臨時數(shù)組中

? ? ? ? ? ? $number[$i-1] = $minNumber;//低位取出的數(shù)字換給高位

? ? ? ? ? ? //刪除低位數(shù)組中已經(jīng)換給高位的數(shù)字

? ? ? ? ? ? $key = array_search($minNumber, $array);

? ? ? ? ? ? unset($array[$key]);

? ? ? ? ? ? //升序排列低位數(shù)組并還原成字符串

? ? ? ? ? ? $array = $this->quickSort(array_values($array));

? ? ? ? ? ? $newString = implode('', $array);

? ? ? ? ? ? //返回高位數(shù)和升序排列后的低位數(shù)組成的新的數(shù)字

? ? ? ? ? ? return substr($number, 0, $i).$newString;

? ? ? ? }

}

? ? return $number;

}

/**

* 取出剛好大于高位的數(shù)字

* @param array $array

* @param $number

* @return mixed

*/

public function minNumber(Array $array, $number)

{

? ? $temp = [];

? ? foreach ($array as $value) {

? ? ? ? if ($value > $number) {

? ? ? ? ? ? array_push($temp, $value);

? ? ? ? }

}

? ? return min($temp);

}

/**

* 快速排序法

* @param array $array

* @return array

*/

public function quickSort(Array $array){

? ? $length = count($array);

? ? if ($length <= 1) {

? ? ? ? return $array;

? ? }

? ? //數(shù)組第一個值作為分隔值

? ? $middle = $array[0];

? ? $leftArray = []; //小于中間值

? ? $rightArray = []; //大于中間值

? ? for($i = 1; $i < $length; $i++) {

? ? ? ? if ($middle > $array[$i]) {

? ? ? ? ? ? array_push($leftArray, $array[$i]);

? ? ? ? } else {

? ? ? ? ? ? array_push($rightArray, $array[$i]);

? ? ? ? }

}

? ? //遞歸分割

? ? $leftArray = $this->quickSort($leftArray);

? ? $rightArray = $this->quickSort($rightArray);

? ? //合并

? ? return array_merge($leftArray, array($middle), $rightArray);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疚察,一起剝皮案震驚了整個濱河市排监,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玖瘸,老刑警劉巖秸讹,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雅倒,居然都是意外死亡璃诀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門蔑匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劣欢,“玉大人,你說我怎么就攤上這事裁良≡浣” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵趴久,是天一觀的道長丸相。 經(jīng)常有香客問我搔确,道長彼棍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任膳算,我火速辦了婚禮座硕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涕蜂。我一直安慰自己华匾,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布机隙。 她就那樣靜靜地躺著蜘拉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪有鹿。 梳的紋絲不亂的頭發(fā)上旭旭,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音葱跋,去河邊找鬼持寄。 笑死源梭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的稍味。 我是一名探鬼主播废麻,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼模庐!你這毒婦竟也來了烛愧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤赖欣,失蹤者是張志新(化名)和其女友劉穎屑彻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶吮,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡社牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悴了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搏恤。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖湃交,靈堂內(nèi)的尸體忽然破棺而出熟空,到底是詐尸還是另有隱情,我是刑警寧澤搞莺,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布息罗,位于F島的核電站,受9級特大地震影響才沧,放射性物質(zhì)發(fā)生泄漏迈喉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一温圆、第九天 我趴在偏房一處隱蔽的房頂上張望挨摸。 院中可真熱鬧,春花似錦岁歉、人聲如沸得运。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熔掺。三九已至,卻和暖如春非剃,著一層夾襖步出監(jiān)牢的瞬間置逻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工努潘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诽偷,地道東北人坤学。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像报慕,于是被迫代替她去往敵國和親深浮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 排序算法說明 (1)排序的定義:對一序列對象根據(jù)某個關(guān)鍵字進行排序眠冈; 輸入:n個數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 651評論 0 0
  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,137評論 0 3
  • 某次二面時飞苇,面試官問起Js排序問題,吾絞盡腦汁回答了幾種蜗顽,深感算法有很大的問題布卡,所以總計一下! 排序算法說明 (1...
    流浪的先知閱讀 1,187評論 0 4
  • 通過dict來查類的屬性結(jié)構(gòu)
    正在努力ing閱讀 302評論 0 0
  • 學(xué)習(xí)雇盖, 你能夠選取認真忿等, 選取專心, 也能夠選取放棄崔挖, 選取不在意贸街。 人生自有選取。 工作狸相, 你能夠選取努力奮斗薛匪,...
    播音1802DMQ閱讀 248評論 0 0