class Solution {
public:
string largestNumber(vector<int>& nums) {
}
};
179. 最大数
给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:
nums = [10,2]
输出:"210"
示例 2:
输入:
nums = [3,30,34,5,9]
输出:"9534330"
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
原站题解
python3 解法, 执行用时: 52 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-24 11:29:45
class Solution: def largestNumber(self, nums: List[int]) -> str: nums_str = list(map(str, nums)) compare = lambda x, y: 1 if x+y < y+x else -1 nums_str.sort(key=functools.cmp_to_key(compare)) res = ''.join(nums_str) return '0' if res[0] == '0' else res
javascript 解法, 执行用时: 76 ms, 内存消耗: 42.1 MB, 提交时间: 2022-11-24 11:23:11
/** * @param {number[]} nums * @return {string} */ var largestNumber = function(nums) { nums.sort((x, y) => { let sx = 10, sy = 10; while (sx <= x) { sx *= 10; } while (sy <= y) { sy *= 10; } return '' + (sx * y + x) - ('' + (sy * x + y)); }) if (nums[0] === 0) { return '0'; } return nums.join(''); };
golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2022-11-24 11:22:55
func largestNumber(nums []int) string { sort.Slice(nums, func(i, j int) bool { x, y := nums[i], nums[j] sx, sy := 10, 10 for sx <= x { sx *= 10 } for sy <= y { sy *= 10 } return sy*x+y > sx*y+x }) if nums[0] == 0 { return "0" } ans := []byte{} for _, x := range nums { ans = append(ans, strconv.Itoa(x)...) } return string(ans) }