1. 程式人生 > 其它 >劍指Offer【32】-- 將陣列排成最小的數

劍指Offer【32】-- 將陣列排成最小的數

技術標籤:劍指offer演算法資料結構java劍指劍指Offer

題目描述

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。

示例1
輸入

[3,32,321]

返回值

“321323”

解答

這道題要求拼起來的數是最小的數字,其實是一個排序問題,只要理解了這一點,就可以快速解決。
假設有兩個字串s1=3s2=32,那s1+s2=332,s2+s1=323,也就是s1+s2>s2+s1
像上面這種情況,要想拼接起來的數最小,肯定是s2在前面,s1

在後面。

而在陣列中,我們要使所有的拼接起來是最小,則需要兩兩比較,類似排序,把滿足s1+s2>s2+s1s1放到後面,s2放到前面。

而排序演算法有很多種,我們直接呼叫API的,如果使用冒泡就是O(n2),內建的函式是O(NlogN),最差的時候是O(n2)。

import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        String[] strs = new String[numbers.
length]; for(int i = 0; i < numbers.length; i++) strs[i] = String.valueOf(numbers[i]); Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x)); StringBuilder res = new StringBuilder(); for(String s : strs) res.append(s); return res.
toString(); } }

當然,要是自己實現排序演算法也是完全ok的。

【作者簡介】
秦懷,公眾號【秦懷雜貨店】作者,技術之路不在一時,山高水長,縱使緩慢,馳而不息。這個世界希望一切都很快,更快,但是我希望自己能走好每一步,寫好每一篇文章,期待和你們一起交流。

此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯絡作者核實刪除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~