剑指offer67题-No32.把数组排成最小的数

法1:重载比较运算符

如果字符串a拼接b的得到的数字大于b拼接a,那么肯定b应该排在a的前面,我们要就按照这样的次序将排序的比较重载就可以了。

PS:重载比较运算符,如何确定是升序还是降序?1. 核心规则

  • 升序:当 a < b 返回 true 时,排序算法会将 a 放在 b 前面(即 ab 小,按从小到大排列)。
  • 降序:当 a > b 返回 true 时,排序算法会将 a 放在 b 前面(即 ab 大,按从大到小排列)。
std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) {
    return a.value > b.value; // 降序
});

题解答案如下:

    string PrintMinNumber(vector<int>& numbers) {
        // write code here
        string res = "";
        if(numbers.size() == 0) return res;
        vector<string> sv;
        for(auto& i : numbers){
            sv.emplace_back(std::to_string(i));
        }
        sort(sv.begin(), sv.end(), cmp);
        for(auto& i : sv){
            res += i;
        }
        return res;
    }

法2:冒泡排序,和法1的思路一样。

    string PrintMinNumber(vector<int>& numbers) {
        // write code here
        string res = "";
        if(numbers.size() == 0) return  res;
        vector<string> sv;
        for(auto& i : numbers){
            sv.emplace_back(std::to_string(i));
        }

        for(int i = 0; i < numbers.size() - 1; ++i){
            for(int j = 0; j < numbers.size() - i - 1; ++j){
                string s1 = sv[j] + sv[j + 1];
                string s2 = sv[j + 1] + sv[j];
                if(s1 > s2){
                    swap(sv[j], sv[j+1]);
                }
            }
        }

       for(auto & i : sv){
        res += i;
       }
        return res;
    }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇