把数组排成最小的数

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把数组排成最小的数相关的知识,希望对你有一定的参考价值。

把数组排成最小的数

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

Input: [3,32,321]

Output : “321323”

class Solution {
public:
    //自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面
    bool isSmaller(string s1, string s2)
    {
        for(int i=0; i<s1.length(); ++i)
        {
            if(s1[i]<s2[i])
                return true;
            else if(s1[i]>s2[i])
                return false;
        }
        return true;
    }
    string PrintMinNumber(vector<int> numbers) {
        if(numbers.size()==0)
            return "";
        vector<string> strVec;
        string res;
        for(int i=0; i<numbers.size(); ++i)           //先int转化为string
        {
            string str = to_string(numbers[i]);
            strVec.push_back(str);
        }
        for(int i=0; i<strVec.size(); ++i)
        {
            for(int j=i+1; j<strVec.size(); ++j)
            {
                string sum1 = strVec[i] + strVec[j];
                string sum2 = strVec[j] + strVec[i];
                if(!isSmaller(sum1, sum2))            //根据自定义规则调整顺序
                {
                    string temp = strVec[i];
                    strVec[i].resize(strVec[j].size());
                    strVec[i] = strVec[j];
                    strVec[j] = temp;
                }
            }
            res += strVec[i];                         //比较一轮后,i位置即为最小元素
        }
        return res;
    }
};

以上是关于把数组排成最小的数的主要内容,如果未能解决你的问题,请参考以下文章

面试题:把数组排成最小的数

剑指offer三十二之把数组排成最小的数

Java 剑指offer(45) 把数组排成最小的数

剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数

剑指offer 面试题33 把数组排成最小的数

把数组排成最小的数