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

    描述

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
     
    这题重点不是求解,而是lambda表达式和仿函数的使用,以减轻我们的编码工作量。
     
     1 struct Com {
     2     bool operator() (string a, string b) {
     3          return a + b < b + a;
     4     }
     5 };
     6 
     7 class Solution {
     8 public:
     9     
    10     string PrintMinNumber(vector<int> nums) {
    11          // 可以将数字后面的位都按前面的补充,如3补充为333,32补充为322
    12         // 经过一次排序,就可以确定组合顺序=》感觉是对的,但不知道为什么对=》尽量先不试
    13         
    14         
    15         // 看题解,用贪心策略:如果字符串a+b<b+a,那么肯定希望a在b前面
    16         // 其实函数返回值是string,就应该往这方面想了
    17         vector<string> str;
    18         for(int val:nums){
    19             str.push_back(to_string(val));
    20         }
    21         
    22         // 用lambda或仿函数,这样就不用我们自己写字符串排列函数了
    23         // lambda表达式,更加方便,类似于js中的回调函数
    24 //         sort(str.begin(),str.end(),[](string a,string b){
    25 //             return a+b<b+a;
    26 //         });
    27         
    28         // 仿函数
    29         sort(str.begin(),str.end(),Com());  // Com为临时对象
    30         
    31         string ret="";
    32         for(string s:str){
    33             ret+=s;
    34         }
    35         return ret;
    36     }
    37 };
    心之所愿,永不相忘
  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/zgll/p/15073182.html
Copyright © 2011-2022 走看看