Largest Number组合最大数算法详解

来源:互联网 发布:域名服务器地址是什么 编辑:程序博客网 时间:2024/06/15 19:19

问题详见: Largest Number

题目是给出一个非负整数数组,将他们组合成最大的整数。题目描述如下:
      Given a list of non negative integers, arrange them such that they form the largest number.For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note:

      The result may be very large, so you need to return a string instead of an integer.

解题思路:

      由于题目中所给数组均为非负整数,所以可以直接将其转换为字符串并将其依照相邻两个字符串拼接按照逆字典序进行排序拼接并直到所有相邻的字符串都满足拼接的最大要求,那么这个字符串形成的数组整个拼接起来就是所求的最大整数(字符串形式)。然而还要考虑一个特例就是有若干个0的数组组成的最大数为0,而不是00或者00…00。整个算法复杂度主要集中在排序那里,复杂度为O(n2)。具体算法如下:

class Solution {public:    string largestNumber(vector<int>& nums) {        vector<string> arr;        for(auto i:nums)            arr.push_back(to_string(i));    //将非负整数数组转换成字符串压进字符串数组        sort(begin(arr), end(arr), [](string &s1, string &s2){return s1+s2>s2+s1; });  //将字符串数组排序使得能组成最大数        string ans;        for(auto s:arr) //将最大数组合出来            ans+=s;        while(ans[0]=='0' && ans.length()>1)    //防止出现“00”这样的结果            ans.erase(0,1);         return ans;    }};

其提交运行结果如下:
Largest Number

0 0
原创粉丝点击