牛客剑指Offer面试题45:把数组排成最小的数

题目描述

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

思路

需额外声明一个vector容器 和 一个string对象,其一用于存放已知的int型vector转换成字符串后的字符数组,其二用于存放排序后的字符数组拼接后的结果

注意:
书中给出的字符为char* 类型,则需使用字符相关函数(strcmp, strcpy, strcat),代码使用string类型,直接可以+=, <等操作
1、sort与qsort.
2、strcpy函数;

https://www.runoob.com/cprogramming/c-function-strcpy.html

3、strcat函数;

https://www.runoob.com/cprogramming/c-function-strcat.html

4、strcmp函数

https://blog.csdn.net/zhao_fu_lu/article/details/20392239

代码

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        string minNumber = "";
        int length = numbers.size();
        //检验有效性
        if(numbers.empty())
            return minNumber;
        //声明字符容器用于存放整数转换成的字符
        vector<string> stringArray;
        //将整数容器中元素转化为字符后逐一压入字符容器中
        for(int i = 0 ; i < length ; ++i)
            stringArray.push_back(to_string(numbers[i]));
        //按自定义规则排序
        sort(stringArray.begin(), stringArray.end(), Compare);
        //将排序后的各字符拼接起来
        for(int i = 0 ; i < length ; ++i)
            minNumber += stringArray[i];
        return minNumber;
    }
    
    static bool Compare(string Str1, string Str2)
    {
        string compareStr1 = Str1 + Str2;
        string compareStr2 = Str2 + Str1;
        return compareStr1 < compareStr2;
    }
};
发布了65 篇原创文章 · 获赞 0 · 访问量 2039

猜你喜欢

转载自blog.csdn.net/ljmiiianng/article/details/103792755
今日推荐