劍指 Offer 45. 把陣列排成最小的數
阿新 • • 發佈:2020-10-25
劍指 Offer 45. 把陣列排成最小的數
解題思路
將數字轉換為字串,按照字典序排序所有字串
排序函式
str1.compare(str2)
> 0 str1 > str2
< 0 str1 < str2
= 0 str1 = str2
比如“30”和“9”,“300”和“30”
對於每一對數字
拼接“30”+“9”=“309”,和“9”+“30”=“930”,使用string的compare可以很方便的按照字典序比較。“309”<"930"
同樣的:
“30030”<“30300”
程式碼
class Solution { public: static bool compare1(int n1,int n2) { stringstream ss; string str1,str2; ss<<n1; ss>>str1; ss.clear(); ss<<n2; ss>>str2; string cmp1,cmp2; cmp1=str1+str2; cmp2=str2+str1; return cmp1.compare(cmp2)<0; } string minNumber(vector<int>& nums) { string res=""; sort(nums.begin(),nums.end(),compare1); for(int i=0;i<nums.size();i++) { stringstream ss; ss<<nums[i]; string temp; ss>>temp; res+=temp; } return res; } };