179. 最大数

1. 题目描述

给定一组非负整数 nums,重新排列它们每位数字的顺序使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:

输入:nums = [10,2]
输出:"210"
示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"
示例 3:

输入:nums = [1]
输出:"1"
示例 4:

输入:nums = [10]
输出:"10"

2. 解题思路

整形数组转为字符串数组排序。

2.1 C++

 1 class Solution {
 2 public:
 3     string largestNumber(vector<int>& nums) {
 4         vector<string> vec;
 5         for(int i = 0; i < nums.size(); i++){
 6             string temp = to_string(nums[i]);
 7             vec.push_back(temp);
 8         }
 9         sort(vec.begin(), vec.end(), cmp);
10         string all;
11         if(vec[0] == "0"){
12             return "0";
13         }
14         for(int i = 0; i < vec.size(); i++){
15             all += vec[i]; 
16         }       
17         return all;
18     }
19     static bool cmp(string a, string b){
20         return a + b > b + a;
21     }
22 };

2.2 Java

 1 class Solution {
 2     public String largestNumber(int[] nums) {
 3         String[] s = new String[nums.length];
 4         for(int i = 0; i <nums.length; i++){
 5             s[i] = String.valueOf(nums[i]);
 6         }
 7         
 8         Arrays.sort(s, (a, b) -> (b+a).compareTo((a+b)));
 9         
10         if(s[0].equals("0")){
11             return "0";
12         }
13         StringBuilder builder = new StringBuilder();
14 
15         for(int i = 0; i < nums.length; i++){
16             builder.append(s[i]);
17         }
18         
19         return builder.toString();
20     }
21 }

2.3 Python

1 class compare(str):
2     def __lt__(x, y):
3         return x + y > y + x
4 class Solution:
5     def largestNumber(self, nums: List[int]) -> str:
6         larger_num = ''.join(sorted(map(str, nums), key = compare))
7         return '0' if larger_num[0] == '0' else larger_num

3. 结语

 努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

 如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

原文地址:https://www.cnblogs.com/haifwu/p/13854803.html