《每日一题》把数组排成最小的数

版权声明:喜欢可以转载哦,声明一下哈 https://blog.csdn.net/QQ1910084514/article/details/82557600

题目描述

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

思路

先把整数转化为字符串,这样容易处理

现在假设有三个字符串 "3"     "32"     "321"

对这三个字符串排序,比如说 "3"   和  "32" 排序  先拼成 "332"  和 "323"   比较两个凭借后的字符串的大小,如果"332"大 就交换"3"

和"32".

按照这个方法最后排序后的字符串拼接起来就是所有拼接的方式中最小的字符串了。

代码

#include<string.h>
#include<stdio.h>
#include<stdlib.h>

class Solution {
public:
    //这个比较和strcmp不是完全一样
    int my_strcmp(string str1,string str2)
    {
        string tmp1=str1+str2;
        string tmp2=str2+str1;
        return strcmp(tmp1.c_str(),tmp2.c_str());//拼接比较
        
    }
    
    string PrintMinNumber(vector<int> numbers) {
        const int len=numbers.size();
       string str[len]; 
        char buf[50]={0};
        for(int i=0;i<len;i++)
        {
           sprintf(buf,"%d",numbers.at(i));
           str[i].append(buf);
        }
        //排序 降序
        for(int i=0;i<len;i++)
        {
            for(int j=0;j<len-i-1;j++)
            {
                if(my_strcmp(str[j],str[j+1])>0)
                {
                    string tmp;
                    tmp=str[j];
                    str[j]=str[j+1];
                    str[j+1]=tmp;
                }
            }
        }
        string ret;
        for(int i=0;i<len;i++)
            ret+=str[i];
        return ret;
    }
};

猜你喜欢

转载自blog.csdn.net/QQ1910084514/article/details/82557600