【剑指offer-解题系列(33)】把数组排成最小的数

来源:互联网 发布:好听网络歌曲排行榜 编辑:程序博客网 时间:2024/05/21 17:10


题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
分析
主要思想是实现一个比较函数cmp,然后利用这个函数进行排序,得到最终序列,排序方法使用快排,冒泡均可。
代码实现
    string PrintMinNumber(vector<int> numbers) {
        if(numbers.size()<=0)
            return "";
        vector<string> strs;
        char tmp[256]={'\0'};
        for(auto a = numbers.begin();a!=numbers.end();a++)
        {
            sprintf(tmp ,"%d", *a );
            strs.push_back(string(tmp));
        }
        qsort(strs,0,strs.size()-1);
        string res;
        for(auto a = strs.begin();a!=strs.end();a++)
        {
            res+=*a;
        }
        return res;
    }
    void qsort(vector<string>&numbers,int start,int end){
        if(start>=end)
            return;
        string value = numbers[end];
        int ind = start;
        for(int i = start;i<end;i++){
            if( cmp(numbers[i],value,0,0)<0){
             swap(numbers[i],numbers[ind++]);   
            }
        }
        swap(numbers[ind],numbers[end]);
        qsort(numbers,  start,ind-1);
        qsort(numbers,  ind+1,end);
       
    }
    int cmp(string& a,string& b,int start_a,int start_b){
        unsigned long i=start_a,j=start_b;
        while(i<a.size()&&j<b.size())
        {  
            if(a[i]>b[j])
                return 1;
            else if(a[i]<b[j])
                return -1;
            else{
                i++;
                j++;
            }
        }
        if(i==a.size()&&j==b.size())
            return 0;
       
        else if(i==a.size())
            return cmp(a,b,0,j);
        else if(j==b.size())
            return cmp(a,b,i,0);
       
        return 0;
    }
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发掉发严重怎么办吃什么 掉了一块钱很气怎么办 头发软又少怎么办盘头 头发出油掉的厉害怎么办 头发很油又少怎么办 18岁头发发量少怎么办 头发少长的慢怎么办 额头大发际线高怎么办 前额两边的头发变少了怎么办 吃减肥药掉头发怎么办 牙长智齿吃饭疼怎么办 头发稀少容易掉发怎么办 大把掉发头发稀少怎么办 头发掉厉害洗生发灵更掉怎么办? 额头两侧和头顶头发少怎么办 额头前面头发少怎么办天生的 头两边的碎头发怎么办 30岁后头发少怎么办 生完孩子头发少怎么办 1岁宝宝头发少怎么办 头顶上的头发少怎么办呢 22岁头顶头发稀少怎么办 头发又稀又少怎么办 头顶的头发越来越少怎么办 四岁宝宝头发稀少怎么办 一岁宝宝头发稀少怎么办 三岁宝宝头发稀少怎么办 头发油急着出门怎么办 长出的头发毛糙弯曲怎么办 头发薄还掉头发怎么办 头发少掉的厉害怎么办 一洗头就掉很多头发怎么办 生完孩子掉头发怎么办 甲减引起的肥胖怎么办 18岁掉头发严重怎么办 5岁儿童掉头发严重怎么办 18头发掉的严重怎么办 甲癌碘131后腮腺肿大怎么办 头发出油发丝细怎么办 25岁总掉头发怎么办 25岁掉头发厉害怎么办