算法練習(xí) 劍指offer 45.把數(shù)組排成最小的數(shù)

難度:中等

題目:

輸入一個(gè)非負(fù)整數(shù)數(shù)組,把數(shù)組里所有數(shù)字拼接起來(lái)排成一個(gè)數(shù),打印能拼接出的所有數(shù)字中最小的一個(gè)。

示例 1:

輸入: [10,2]

輸出: "102"

示例?2:

輸入: [3,30,34,5,9]

輸出: "3033459"

提示:

0 < nums.length <= 100

說(shuō)明:

輸出結(jié)果可能非常大,所以你需要返回一個(gè)字符串而不是整數(shù)

拼接起來(lái)的數(shù)字可能會(huì)有前導(dǎo) 0,最后結(jié)果不需要去掉前導(dǎo) 0

來(lái)源:力扣(LeetCode)


解答:

?public?String?minNumber(int[]?nums)?{

????????String[]?strs?=?new?String[nums.length];

????????for(int?i?=?0;?i?<?nums.length;?i++)

????????????strs[i]?=?String.valueOf(nums[i]);

????????fastSort(strs,?0,?strs.length?-?1);

????????StringBuilder?res?=?new?StringBuilder();

????????for(String?s?:?strs)

????????????res.append(s);

????????return?res.toString();

????}

????void?fastSort(String[]?strs,?int?l,?int?r)?{

????????????if(l?>=?r)?return;

????????????int?i?=?l,?j?=?r;

????????????String?tmp?=?strs[i];

????????????while(i?<?j)?{

????????????????while((strs[j]?+?strs[l]).compareTo(strs[l]?+?strs[j])?>=?0?&&?i?<?j)?j--;

????????????????while((strs[i]?+?strs[l]).compareTo(strs[l]?+?strs[i])?<=?0?&&?i?<?j)?i++;

????????????????tmp?=?strs[i];

????????????????strs[i]?=?strs[j];

????????????????strs[j]?=?tmp;

????????????}

????????????strs[i]?=?strs[l];

????????????strs[l]?=?tmp;

????????????fastSort(strs,?l,?i?-?1);

????????????fastSort(strs,?i?+?1,?r);

???????}

更改了快速排序的方法,改變了排序規(guī)則,比較了兩個(gè)字符串拼接之后的大小,然后更改字符串組,來(lái)完成題目要求的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容