• 2021.4.12-刷题(最大数)


    题目链接:https://leetcode-cn.com/problems/largest-number
    题目描述:
    给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
    注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

    示例 1:
    输入:nums = [10,2]
    输出:"210"

    示例 2:
    输入:nums = [3,30,34,5,9]
    输出:"9534330"

    示例 3:
    输入:nums = [1]
    输出:"1"

    示例 4:
    输入:nums = [10]
    输出:"10"

    重点:
    1.将nums中的各数字转化成字符串格式。
    2.排序。比较规则:两两字符串连接后比较。
    3.拼接所有字符串。
    难点:
    1.int转string,to_string()方法。
    2.泛型算法-lambda表达式。
    https://zhuanlan.zhihu.com/p/303215825
    NOTE:
    我们还需要考虑一种特殊的情况:前导0
    例如:输入[0,0],输出因该为 “0” 而不是“00”。
    因为字符串数组是自定义降序,我们可以检查排好序的字符串数组的第一个元素是否为0:
    如果第一个元素为0,说明后续若还有元素,也只能是0了,结果必然是0。
    如果第一个元素不为0,则不会出现前导0的特殊情况。

    题解:

    
    class Solution {
    public:
        
        string largestNumber(vector<int>& nums) {
            vector<string> str_nums;
            string ans;
            for(int i: nums)
            {
                str_nums.push_back(to_string(i));
            }
            sort(str_nums.begin(), str_nums.end(), [](string &a, string &b){return a + b > b + a;});
            
            if(str_nums[0] == "0")
                return "0";
            for(string s: str_nums)
            {
                ans += s;
            }
            return ans;
    
        }
    };
    
  • 相关阅读:
    耶鲁大学——斯金纳理论基础
    耶鲁大学——弗洛伊德(基础)
    for input 'WID' 报错
    选中当前行wid
    微信支付
    vue.js列表渲染项目实例
    批量删除
    DIV 局部刷新
    DIV块刷新
    CMD DOS命令
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14649113.html
Copyright © 2020-2023  润新知