[LeetCode] 179. Largest Number
Posted aaronliu1991
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 179. Largest Number相关的知识,希望对你有一定的参考价值。
最大数。题意是给一个整数数组,请将他们拼接成字符串,返回数字最大的字符串。例子,
Example 1:
Input:[10,2]
Output: "210"
Example 2:
Input:[3,30,34,5,9]
Output: "9534330"
思路是需要自己写一个comparator函数比较每两个数字拼接结果的字典序,举个例子,需要比较到底是210的字典序大还是102的字典序大。这道题没什么算法,考察的是是否能自己实现一个自定义的comparator函数。javascript因为没有数据类型的限制的关系,可以直接比较两个数字的大小。
时间O(nlogn) - sort函数
空间O(n)
Java实现
1 class Solution { 2 public String largestNumber(int[] nums) { 3 // corner case 4 if (nums == null || nums.length == 0) { 5 return ""; 6 } 7 8 // normal case 9 String[] res = new String[nums.length]; 10 for (int i = 0; i < nums.length; i++) { 11 res[i] = String.valueOf(nums[i]); 12 } 13 Arrays.sort(res, new Comparator<String>() { 14 @Override 15 public int compare(String str1, String str2) { 16 String s1 = str1 + str2; 17 String s2 = str2 + str1; 18 return s2.compareTo(s1); 19 } 20 }); 21 if (res[0].charAt(0) == ‘0‘) { 22 return "0"; 23 } 24 StringBuilder sb = new StringBuilder(); 25 for (String s : res) { 26 sb.append(s); 27 } 28 return sb.toString(); 29 } 30 }
JavaScript实现
1 /** 2 * @param {number[]} nums 3 * @return {string} 4 */ 5 var largestNumber = function (nums) { 6 // corner case 7 if (nums.every(n => n === 0)) { 8 return ‘0‘; 9 } 10 11 // normal case 12 nums.sort((n1, n2) => { 13 const s1 = new String(n1); 14 const s2 = new String(n2); 15 const first = s1 + s2; 16 const second = s2 + s1; 17 if (first > second) { 18 return -1; 19 } else if (first < second) { 20 return 1; 21 } else return 0; 22 }); 23 return nums.join(‘‘); 24 };
以上是关于[LeetCode] 179. Largest Number的主要内容,如果未能解决你的问题,请参考以下文章