把數組排成最小的數
阿新 • • 發佈:2017-08-16
stream get 小數 gin com targe auto blog static
題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。/*對vector容器內的數據進行排序,按照 將a和b轉為string後
若 a+b<b+a a排在在前 的規則排序,
如 2 21 因為 212 < 221 所以 排序後為 21 2
to_string() 可以將int 轉化為string
*/
class Solution { public: static bool cmp(int a,int b) { string A=""; string B=""; A+=to_string(a); A+=to_string(b); B+=to_string(b); B+=to_string(a); return A<B; } string PrintMinNumber(vector<int> numbers) { string answer=""; sort(numbers.begin(),numbers.end(),cmp); for(int i=0;i<numbers.size();i++) { answer+=to_string(numbers[i]); } return answer; } };
class Solution { public: string PrintMinNumber(vector<int> numbers) { string result; int length=numbers.size(); if(length<=0) return result; stringstream stream; //string *str=new string[length]; vector<string> vec; for(int i=0;i<length;i++) { //方法1:用to_string將數字轉換為字符串 vec.push_back(to_string(numbers[i])); //方法2:借助借助字符串流stringstream將數字轉換為字符串 /*string str; stream<<numbers[i]; stream>>str; vec.push_back(str); stream.clear(); //記得要清空 */ } sort(vec.begin(),vec.end(),comp); for(int i=0;i<length;i++) { result+=vec[i]; } return result; } static bool comp(string str1,string str2) //若comp函數放在外面則可以去掉static關鍵字,原因如下: { //sort中的比較函數compare要聲明為靜態成員函數或全局函數,不能作為普通成員函數,否則會報錯。 //因為:非靜態成員函數是依賴於具體對象的,而std::sort這類函數是全局的,因此無法再sort中調 string s1=str1+str2; //用非靜態成員函數。靜態成員函數或者全局函數是不依賴於具體對象的, 可以獨立訪問,無須創建任何 string s2=str2+str1; //對象實例就可以訪問。同時靜態成員函數不可以調用類的非靜態成員。 return s1<s2; } };
http://blog.csdn.net/fanzitao/article/details/7895344
http://blog.csdn.net/taoyanqi8932/article/details/52541312
class Solution { public: string PrintMinNumber(vector<int> numbers) { sort(numbers.begin(),numbers.end(),[](const int& a,const int& b){ return to_string(a)+to_string(b)<to_string(b)+to_string(a);}); string res; for (auto c:numbers) res+=to_string(c); return res; } };
把數組排成最小的數