题目:最大数
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.
题意:
给定一个由非负整数组成的数组,排列它们使其形成最大的数。
Note:
结果可能非常大,所以需要返回一个字符串来替代一个整数。
思路:
对于两个数字a和b来说,如果将其都转为字符串,如果ab > ba,则a排在前面,比如9和34,由于934>349,所以9排在前面,再比如说30和3,由于303<330,所以3排在30的前面。按照这种规则对原数组进行排序后,将每个数字转化为字符串再连接起来就是最终结果。
代码:C++版:28ms
class Solution { public: string largestNumber(vector<int>& nums) { string res; sort(nums.begin(), nums.end(), [](int a, int b){ //排序 return to_string(a) + to_string(b) > to_string(b) + to_string(a); }); for (int i=0; i<nums.size(); ++i) { //拼成一个字符串 res += to_string(nums[i]); } return res[0] == '0' ? "0" : res; } };另一种写法:C++版:8ms
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 res; for(auto s : arr) //拼成同一个字符串 res += s; while(res[0]=='0' && res.length()>1) //去开始为0的情况 res.erase(0,1); return res; } };代码:java版本:122ms
public class Solution { public String largestNumber(int[] nums) { if (nums == null || nums.length == 0) return ""; String[] str = new String[nums.length]; for (int i=0; i<nums.length; i++) { //转换为字符串数组 str[i] = Integer.toString(nums[i]); } Arrays.sort(str, new Comparator<String>(){ //自定义比较器排序 public int compare(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); if (len1 > len2) { int res = s1.substring(0, len2).compareTo(s2); return res==0 ? compare(s1.substring(len2), s2) : -res; } else if (len1 < len2) { int res = s2.substring(0, len1).compareTo(s1); return res==0 ? compare(s1, s2.substring(len1)) : res; } else { return s2.compareTo(s1); } } }); StringBuilder sb = new StringBuilder(); for (String s : str) { //组拼成字符串 if (sb.length()==0 && s.startsWith("0")) continue; sb.append(s); } return sb.length()==0 ? "0" : sb.toString(); } }