算法=>組合出最大數(shù)的最優(yōu)解推導(dǎo)

題目和靈感來(lái)源于掘金=>每天一道算法題及下方評(píng)論。

給定一個(gè)非負(fù)整數(shù)列表,重新排列他們的順序把他們組成一個(gè)最大的數(shù)輸出,轉(zhuǎn)成字符串的形式。
列入[30,34,5,9,3] => "9534330"

首先這很符合字符串比較大小的方式

兩字符串從第一個(gè)字符開(kāi)始比較,如果前n個(gè)都相同,則第n+1個(gè)大的字符串比較大

先寫(xiě)一個(gè)簡(jiǎn)單的排序

var a = [30,34,5,9,3]
a.sort(function(a,b){
return a+"" < b+"";
})

9,5,34,30,3

sort 方法可理解為如果返回true則a和b互換位置

發(fā)現(xiàn)第一位不同的可以簡(jiǎn)單的排序,位數(shù)相同的數(shù)也可以簡(jiǎn)單的處理,唯有位數(shù)不相同的數(shù)很特別

兩個(gè)數(shù)34,3 在源數(shù)組的位置不同會(huì)輸出不同的結(jié)果,顯示343 要大于334,在舉個(gè)例子31,3 顯然331是要大于313的

關(guān)鍵在于位數(shù)多的那個(gè),第一個(gè)與第一個(gè)字符不同的位置上的字符是否大于第一個(gè)字符

function combinationMaxNumber(arr){

let cloneArr = arr.map(function(e,i){
    return e+"";
}) 
cloneArr.sort(function(a,b){
    let i;
    for( i=0;i<a.length && i<b.length;i++){
        if(a.charAt(i) != b.charAt(i)){
            return a.charAt(i) < b.charAt(i)
        }

    }
   
    if(a.length > b.length){
        return a.charAt(0) > a.charAt(i);
    }
    else{
        return b.charAt(0) < b.charAt(i);
    }
    
        

})
return cloneArr.join("");
}

想想之前的討論,"兩個(gè)數(shù)34,3 在源數(shù)組的位置不同會(huì)輸出不同的結(jié)果,顯示343 要大于334",字符串的相加能實(shí)現(xiàn)這種效果,于是

function combinationMaxNumber(arr){

var cloneArr = arr.slice().sort(function(a,b){
    
    return (a+""+b) < (b+""+a); 
})
return cloneArr.join("");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,808評(píng)論 0 10
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,440評(píng)論 0 5
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,270評(píng)論 0 4
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,402評(píng)論 0 2
  • iOS 基于GCDAsyncSocket快速開(kāi)發(fā)Socket通信
    WolfTin閱讀 160評(píng)論 0 0