32把数组排成最小的数({3,32,321}输出最小数字为321323)

把数组排成最小的数({332321}输出最小数字为321323)
//把数组排成最小的数
//输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
//
//思路:解决大数的问题,就是把数字转换成字符串。然后比较字符串的大小
class Solution
{
public:
    string PrintMinNumber(vector<int> numbers)
    {
        if (numbers.size() == 0)
        {
            return "";
        }
        if (number.size() == 1)
        {
            return to_string(numbers[0]);
        }
        int len = numbers.size();
        vector<string> tmpVec;
        for (int i = 0; i < len; ++i)
        {
            tmpVec.push_back(to_string(numbers[i]));
        }
        sort(tmpVec.begin(), tmpVec.end(), compare);
        string res;
        for (int i = 0; i < len; ++i)
        {
            res = res + tmpVec[i];
        }
        return res;
    }
public:
    static bool compare(string str1, string str2)
    {
        string comp1 = str1 + str2;
        string comp2 = str2 + str1;
        return comp1 < comp2;
    }
};
 1 //知识扩展:
 2 //C++ 排序函数 sort(),qsort()的用法
 3     // ---Sort(start,end,排序方法)
 4     // ---void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
 5     // 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
 6 // 函数原型:
 7     // string to_string (int val);
 8     // string to_string (long val);
 9     // string to_string (long long val);
10     // string to_string (unsigned val);
11     // string to_string (unsigned long val);
12     // string to_string (unsigned long long val);
13     // string to_string (float val);
14     // string to_string (double val);
15     // string to_string (long double val);
16     // 功能:
17     // 将数值转化为字符串。返回对应的字符串。

 

posted @ 2017-09-07 17:02  繁星的夜空2012  阅读(611)  评论(0编辑  收藏  举报