【剑指offer】把数组排成最小的数

题目描述

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

分析:排成最小的数,那么这些数组元素肯定有个最佳的排序,所以我们需要对数组元素进行排序,排序之后数组元素顺序连接即可组成最小的数

所以这些数排序的规则是什么?字典序!

假如x1x2x3和y1y2y3两个数,组成的数x1x2x3y1y2y3或y1y2y3x1x2x3字典序小的放前面!

关键排序规则函数:

static bool cmp(string a,string b)
{
    string str1=a+b;
    string str2=b+a;
    return str1.compare(str2)<0;
}
复制代码
//排序规则函数
static bool cmp(string a,string b)
{
    string str1=a+b;
    string str2=b+a;
    return str1.compare(str2)<0;
}
//int 转 string
string intTostring(int x)
{
    stringstream ss;
    ss<<x;
    string str=ss.str();
    return str;
}
string PrintMinNumber(vector<int> numbers)
{
    vector<string> v;
    int n=numbers.size();
    if(n==0)
        return "";
    for(int i=0;i<n;i++)
    {
        v.push_back(intTostring(numbers[i]));
    }
    //按照规则排序
    sort(v.begin(),v.end(),cmp);

    //按照排序后直接顺序连接即可
    string ans="";
    for(int i=0;i<n;i++)
    {
        ans+=v[i];
    }
    return ans;
}
复制代码
posted @   西*风  阅读(415)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示