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

把數組排成最小的數

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;
    }
};

  

把數組排成最小的數