zoukankan      html  css  js  c++  java
  • 【剑指offer】把数组排成最小的数

    原创博文,转载请注明出处!
    本题牛客网地址

    博客文章索引地址

    博客文章中代码的github地址

    # 题目

    image

    # 思路

    1.排序

          寻找数组元素排序规则,使得数组根据这个规则排序之后,数组元素能排成一个最小的数。排序规则如下:

    • 若ab > ba, 则 a 大于 b,
    • 若ab < ba ,则 a 小于 b,
    • 若ab = ba ,则 a 等于 b;

    2.拼接

          给出数字m和n,怎么得到数字mn和nm并比较两者大小?如果使用数字计算,容易出现拼接后数字超过int能表达的范围。《剑指offer》中解决办法是把数字转换成字符串,使用字符串表示拼接后的数字,并比较拼接后数字的大小。

    # 代码

      1 class Solution {
      2 public:
      3     string PrintMinNumber(vector<int> numbers)
      4     {
      5         string res;
      6         if(numbers.size() == 0) return "";
      7 
      8         // 排序
      9         sort(numbers.begin(), numbers.end(), cmp);
     10 
     11         // 拼接
     12         for(int i = 0; i < numbers.size(); ++i)
     13             res += to_string(numbers[i]);
     14 
     15         return res;
     16     }
     17 private:
     18     // 升序排序
     19     static bool cmp(int a, int b){
     20         string A = to_string(a) + to_string(b);
     21         string B = to_string(b) + to_string(a);
     22         return A < B;
     23     }
     24 };
  • 相关阅读:
    第1次实践作业
    Beta版本演示
    2019 SDN上机第7次作业
    Beta冲刺(4/4)
    Beta冲刺(3/4)
    Beta冲刺(2/4)
    Beta冲刺(1/4)
    2019 SDN上机第6次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8846350.html
Copyright © 2011-2022 走看看