zoukankan      html  css  js  c++  java
  • 【剑指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;
    }
  • 相关阅读:
    第二天课程档案
    第一天课程档案
    SAM初步
    计算几何初步
    数论二次总结
    生成函数入门题汇总
    1500: [NOI2005]维修数列
    20170214
    【bzoj2286】[Sdoi2011]消耗战
    bzoj2223: [Coci 2009]PATULJCI
  • 原文地址:https://www.cnblogs.com/yinbiao/p/11577468.html
Copyright © 2011-2022 走看看