【剑指offer系列】 把数组排成最小的数___33

来源:互联网 发布:mac地址过滤是什么意思 编辑:程序博客网 时间:2024/05/16 10:22

  题目描述:
  输入一个正整数数组,把数组中所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
  
  示例:
  输入:{3 ,32 ,321}
  输出:321323
  
  分析:
  首先把数组中的每个数字转换成字符串的形式,然后对所有字符串进行排序
  排序的规则是:a+b < b+a,则a应该在b的前面,
  最后再将所有的字符串拼接起来即为最终的结果
  为了防止数据溢出,使用字符串的形式来保存最终结果。
  并且字符串起始的0都要去掉,如01234,应该只返回1234即可 
  
  代码:  

    static bool cmp(string& s1,string& s2){        return s1+s2<s2+s1;    }    string largestNumber(vector<int>& nums) {        vector<string> strs;        for(int i=0;i<nums.size();++i){            strs.push_back(to_string(nums[i])); //step 1:转换成字符串        }        sort(strs.begin(),strs.end(),cmp);  //step 2:按照规则排序        string res;        bool flag=true;        for(int i=0;i<strs.size();++i){ //step 3:将所有字符串按序拼接            if(strs[i]=='0'&&flag) continue; //去掉起始的0            res+=strs[i];            flag=false;        }                return res;    }
0 0
原创粉丝点击