• 剑指 Offer 45. 把数组排成最小的数


    输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

    示例 1:

    输入: [10,2]
    输出: "102"
    示例 2:

    输入: [3,30,34,5,9]
    输出: "3033459"
     

    提示:

    0 < nums.length <= 100
    说明:

    输出结果可能非常大,所以你需要返回一个字符串而不是整数
    拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    把给出的数进行排序,对于位数相同的直接按照从小到大排序,对于位数不同的分两种,如10和2就是10在2前面,10和102就是102在10右边,显然10102比10210小,如果是112和1121就是1121在前面关键是比较多出来的那一位。关键是编写cmp函数。

    代码:

    class Solution {
    public:
        static bool cmp(string a,string b) {
            if(a.size() == b.size()) return a < b;
            int len = min(a.size(),b.size());
            for(int i = 0;i < len;i ++) {
                if(a[i] != b[i]) return a[i] < b[i];
            }
            int i = 0;
            if(a.size() < b.size()) {
                while(i < a.size() && b[a.size()] == b[i]) i ++;
                return b[a.size()] > b[i]; 
            }
            while(i < b.size() && a[b.size()] == a[i]) i ++;
            return a[b.size()] < a[i];
        }
        string minNumber(vector<int>& nums) {
            vector<string> num;
            for(int i : nums) {
                num.push_back(to_string(i));
            }
            sort(num.begin(),num.end(),cmp);
            string ans = "";
            for(string i : num) {
                ans += i;
            }
            return ans;
        }
    };
    如果觉得有帮助,点个推荐啦~
  • 相关阅读:
    HTTP协议中的chunked编码解析
    QP编码详解
    从新手到入门,如何进入协议分析的世界
    构造个人轻量级XSS平台获取管理员cookie并登录
    逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
    C# 链接数据库并查询操作
    excel日期格式转换
    SAP的PI日志查看工具
    abap 动态指针理解加深ASSIGN COMPONENT
    ABAP-编程时快速带出关键字与快速注释快捷键设置
  • 原文地址:https://www.cnblogs.com/8023spz/p/13765277.html
Copyright © 2020-2023  润新知