把数组排成最小的数

来源:互联网 发布:网络打鱼游戏版本费 编辑:程序博客网 时间:2024/06/05 19:48

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

class Solution {public: string PrintMinNumber(vector<int> numbers) {  if(numbers.size()==0)            return "";        vector<string> vs=intConvertStr(numbers);        string str="";        for(int i=0;i<vs.size();i++)            str+=vs[i];        return str; }       vector<string> intConvertStr(vector<int> numbers){        vector<string> vs;        vs.resize(numbers.size());        vs[0]=itos(numbers[0]);        for(int i=1;i<numbers.size();i++){            string s=itos(numbers[i]);            int j;            for(j=i-1;j>=0;j--){                vs[j+1]=vs[j];                if(com(s,vs[j])){                    vs[j+1]=s;                    break;                }            }            if(j==-1)                vs[0]=s;        }        return vs;    }       string itos(int n){        vector<int> vc;        while(n!=0){            vc.push_back(n%10);            n/=10;        }               string s="";        for(int i=vc.size()-1;i>=0;i--){            s.push_back(char(vc[i]+48));        }        return s;    }       bool com(string s,string st){        int i;        for(i=0;i<s.length()&&i<st.length();i++){            if(s[i]>st[i])                return true;            if(s[i]<st[i])                return false;                }               if(i==s.length()){            while(i<st.length()&&st[i]==st[i-1])                i++;            if(i!=st.length()&&st[i]>st[i-1])                return false;            return true;        }        if(i==st.length()){            while(i<s.length()&&s[i]==s[i-1])                i++;            if(i!=s.length()&&s[i]>s[i-1])                return true;            return false;        }        return false;    }   };


0 0
原创粉丝点击