1. 程式人生 > >31、把陣列排成最小的數

31、把陣列排成最小的數

題目描述:

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

解題思路:

  陣列中所有的數拼接後有可能會超過整數的範圍,因此本題必須要使用字串來處理。
  要對3,32 ,321 排序,不能直接比較32,3的大小,應該比較323,332的大小,即,3,32的大小應該有323,332的大小來確定。因此3比32大,3應該在32後面,32和321比較時,32321>32132,因此32>321,32在321後面,3,32,321由小到大排序為,321,32,3,組成的最小數為:321323

在這裡插入圖片描述

Demo:

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        vector<string> vec_str;
		for(auto num : numbers)
		{
			vec_str.push_back(to_string(num));
		}
        // 重新定義排序規則
		sort(begin(vec_str), end(vec_str), [] (const string &s1, const string &
s2) -> bool { return s1 + s2 < s2 + s1; }); string output = ""; for (const auto s : vec_str) output += s; return output; } };