1. 程式人生 > >19 把數組排成最小的數

19 把數組排成最小的數

不存在 兩個 3.1 問題 一個數 demo 排序規則 一個 最小數

0 引言

問題:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。
例如輸入數組{332321},則打印出這三個數字能排成的最小數字為321323。

1 抽象問題具體化

舉例:輸入數組{3,32,321},打印出這三個數字能排成的最小數字.

  1. 3與32相比,32排在3的前邊,得到序列32,3;

  2. 321與3相比,321排在3的前邊;321與32相比,321排在32的前邊,得到序列321,32,3;

  3. 打印序列321323.

2 具體問題抽象分析

  1. 定義排序規則:兩個數字,從最高位數字開始比較。

    1.1 如果小,則排在前邊;

    1.2 如果大,則排在後邊;

    1.3 如果相等,則比較下一位,如果下一位不存在,則比較當前數與前一位的大。

      1.3.1 如果小於,則排前邊;

      1.3.2 如果大於,則排後邊;

      1.3.3 如果相等,則隨意。

  2. 將所有數拼接起來,輸出即可.

  3. 為了便於對數中的每個數字單獨處理,將數轉成字符串.

3 demo

4 代碼優化

19 把數組排成最小的數