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 };
    心之所愿,永不相忘
  • 相关阅读:
    Python中os与sys两模块的区别
    单线程爬取图片
    linux下glances服务器监控工具
    python中的join()函数的用法
    python的exec、eval详解
    mongodb启动不了解决方法
    生产者和消费者(.net实现)
    IOS开发--第一阶段--导行(1)(基本概念)
    12.26 linux基本操作指令
    12.25
  • 原文地址:https://www.cnblogs.com/zgll/p/15073182.html
Copyright © 2011-2022 走看看