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. 结语
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。