#LC179:最大数

博主分享了在LeetCode刷题和CSP认证过程中的经验,探讨了如何解决数字字符串按字典序逆序排列的问题。关键在于理解相同长度数字字符串的比较规则,并重写sort函数。遇到的挑战包括sort函数需要普通函数指针而不能直接使用类成员函数。通过使用lambda表达式成功解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话
俺又回来了,在开学刷了一百多题的leetcode之后,临时抱佛脚做了一些CSP认证的题,就去参加认证了,备受打击,继续回到leetcode!
在这里插入图片描述
题目
我一开始以为字典序逆序就可以了,结果还有3、30这样的,就不太行。其实,这道题的核心思路是:相同长度的数字字符串(”330“ > “303”)的大小和原来数字(330 > 303)大小等价,注意是相同长度。然后题目就简单了,只需要重写sort函数按照两数拼接比较大小得出谁在前谁在后


class Solution {
public:
    static bool cmp(const string& s1, const string& s2)
    {
        return s1 + s2 > s2 + s1;
    }
    string largestNumber(vector<int>& nums) {
        vector<string> ss;
        for(int v : nums)
            ss.push_back(to_string(v));
        sort(ss.begin(), ss.end(), cmp);
        if(ss[0] == "0") return "0";
        string ans = "";
        for(auto i : ss)
            ans += i;
        return ans;
    }
};
  • 有个坑是:0、0、0这样的不需要输出“000”,而是”0“;
  • 然后说一下这个sort重载

我一开始自己写了一个类封装了个string,有点麻烦。然后是这样写的。
bool cmp(const string& s1, const string& s2) { return s1 + s2 > s2 + s1; }

报错了:reference to non-static member function must be called

博主给出的原因是sort函数需要一个普通函数指针,但我们写在Solution类中是一个非静态成员函数,这样的函数都有一个隐含参数this指针,这两个函数指针是不同的,但是静态成员函数没有this指针,就可以传进去。

学习一下函数指针12

leetcode给出的题解中是这样写的

 sort(v.begin(), v.end(), [](const string &a,const string &b){
            return a+b > b+a; //两个字符串先后组合大小降序排列
        });

等我晚上再研究一下STL中的sort是咋说的,争取看明白!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值