Given a list of non negative integers, arrange them such that they form the largest number.
Example 1:
Input: [10,2] Output: "210"
Example 2:
Input: [3,30,34,5,9] Output: "9534330"
大意是:给出一个由非负整数组成的数组,对数组中的非负整数进行排序组合并得到其所能表示的最大的数。
显而易见的解法就是把所有可能的组合进行比较得出最大数,但是这种解法时间复杂度是O(n^n),不考虑这么解
其实如果我们遵循一个原则就是把大的数放最前面,小的数放后面就能得到最大的那个数,但是什么数是大的数呢,如果是位数相同比如 9,8或者10,20很简单就是两个数谁值比较大谁就放前面,但是如果是9,13或者8,891呢,比较起来就稍微复杂一点了。其实最简单的方法是直接比较AB和BA的值谁比较大,如果AB比较大则把A放B前面就可以了。
/** * @param {number[]} nums * @return {string} */ var largestNumber = function(nums) { nums.sort(function(a,b){ return parseInt(b+""+a) - parseInt(a+""+b); }) var rt = nums.join(""); return rt.charAt(0)=="0"?"0":rt; };
说明
JavaScript中提供了数组的排序方法
arrayObject.sort(sortby)
请注意,数组在原数组上进行排序,不生成副本。
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
 - 若 a 等于 b,则返回 0。
 - 若 a 大于 b,则返回一个大于 0 的值。
 
数组从小到大(升序)排列则 return a-b;
数组从大到小(降序)排列则 return b-a;
                    
                
                
            
        
浙公网安备 33010602011771号