最小的组合数字(自定义最小值函数,冒泡排序)

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
 
 
class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        if(numbers.size() == 0){
            return "";
        }
        //冒泡排序,把较大的数不断往后挪,沉到数组的底部
        for(int i=0;i<numbers.size()-1;i++){
            for(int j=0;j<numbers.size()-1-i;j++){
                int temp;
                int minn = Min(numbers[j],numbers[j+1]);
                if(minn == numbers[j+1]){    //后面比前面小,此时要交换
                    temp = numbers[j+1];
                    numbers[j+1] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
        string ans;
        for(int i=0;i<numbers.size();i++){
            ans += itos(numbers[i]);
        }
        return ans;
    }
    string itos(int a){
        if(a==0){
            return "0";
        }
        string ans;
        while(a!=0){
            int ta = a%10;
            ans += (ta+'0');
            a = a/10;
        }
        for(int i=0,j=ans.length()-1;i<j;i++,j--){
            char temp;
            temp = ans[i];
            ans[i] = ans[j];
            ans[j] = temp;
        }
        return ans;
    }
    int Min(int a,int b){
        if(a==0){
            return b;
        }
        if(b==0){
            return a;
        }
        int ta,tb;
        int pa=a,pb=b;
        while(true){
            if(a==0 && b==0){    //说明a,b相等
                return a;
            }else if(a!=0 && b==0){    //32 与 132,932的比较
                ta = a%10;
                if(ta<tb){
                    return pa;
                }
                if(ta>tb){
                    return pb;
                }
                a /= 10;
            }else if(a==0 && b!=0){    //132,932与 32的比较
                tb = b%10;
                if(ta<tb){
                    return pa;
                }
                if(ta>tb){
                    return pb;
                }
                b /= 10;
            }else{                    //32,321的比较
                ta = a%10;
                tb = b%10;
                if(ta<tb){
                    return pa;
                }
                if(ta>tb){
                    return pb;
                }
                a /= 10;
                b /= 10;
            }
        }
    }
};

猜你喜欢

转载自www.cnblogs.com/fzuhyj/p/10768303.html