minjs1cn / weekly-learning

每周学习分享打卡
0 stars 0 forks source link

10 -【leetcode算法】最大数 #10

Open tradyau opened 3 years ago

tradyau commented 3 years ago

最大数:https://leetcode-cn.com/problems/largest-number/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china

OceanApart commented 3 years ago
/**
 * @param {number[]} nums
 * @return {string}
 */
var largestNumber = function (nums) {
  function compare(a, b) {
    // 字符串化
    a = a + "";
    b = b + "";

    if (a.length === b.length) {
      // 如果长度相等,只需要比较字典序
      // 递减排序
      return a > b ? -1 : 1;
    } else {
      // 如果长度不等,通过相加组合变成长度相等的处理
      // 等价于比较 a + b 和 b + a 的字典序大小
      // 如果 a + b > b + a,说明 a 在 b 前面组成的数更大,也就是 a > b
      return compare(a + b, b + a);
    }
  }

  let sorted = nums.sort(compare);

  if (sorted.every((item) => item === 0)) {
    // 处理全零的情况
    sorted = [0];
  }

  return sorted.join("");
};
tradyau commented 3 years ago

/**

minjs1cn commented 3 years ago

https://leetcode-cn.com/problems/largest-number/submissions/

minjs1cn commented 3 years ago

https://leetcode-cn.com/problems/largest-number/submissions/

wordlex commented 3 years ago
/**
 * @param {number[]} nums
 * @return {string}
 */
var largestNumber = function(nums) {
    const resArray = nums.sort((a,b) => {
        return (b+''+a) - (a+''+b)
    })
    if(resArray.reduce((r,v)=> r+v) == 0){
        return '0'
    }else{
        return resArray.join('')
    }
};
wucuiping commented 3 years ago

/**
 * @param {number[]} nums
 * @return {string}
 */
var largestNumber = function(nums) {
    nums.sort((fE, sE) => {
        const a = '' + fE + sE
        const b = '' +sE + fE
        if (a < b) {
            return 1
        } else if (a > b) {
            return -1
        } else {
            return 0
        }
    })
    if (nums[0] === 0) {
        return '0'
    } else {
        return nums.join('')
    }
};
Brand0n-Zhang commented 3 years ago
/**
 * @param {number[]} nums
 * @return {string}
 */
var largestNumber = function (nums) {
    // 处理全0情况
    if (nums.every((val)=>{
       return val===0
    })) {
        return "0"
    }
    nums.sort().reverse()
    nums.sort((a, b) => {
        if (b.toString()[0] === a.toString()[0] && b.toString().length != a.toString().length) {
            return a.toString().length-b.toString().length
        }
        return parseInt(b.toString()[0]) - parseInt(a.toString()[0])
    })
    // 本质上是一个判断a+b是否大于b+a的过程
    nums.sort((a, b) => {
       return parseInt(b.toString() + a.toString()) - parseInt(a.toString() + b.toString())
    })
    let result = ''
    nums.forEach(element => {
        result = result + element.toString()
    });
    return result
};
FE92star commented 3 years ago

image