当前位置: 面试刷题>> 最大数 (经典算法题500道)


### 完整题目描述 **题目**:最大数 **描述**: 给定一个非负整数数组,你需要重新排列数组中的数字,使得按照从左到右的顺序读,该数字尽可能大。例如,给定数组 `[12, 34, 5, 6, 7]`,通过重新排列,可以得到最大数为 `76543212`。注意,由于数字可能很大,所以结果应该以字符串的形式返回。 **要求**: 1. 不能使用额外的数组来存储结果(除了用于返回的字符串)。 2. 原地修改数组并转化为字符串返回不是必要的,但如果你能做到,也是一种解决方案。 3. 考虑到整数溢出的问题,建议使用字符串来进行比较和拼接。 ### 示例代码 #### PHP 示例 ```php function largestNumber($nums) { // 使用自定义的比较函数对数组进行排序 usort($nums, function($a, $b) { // 字符串比较,将数字转为字符串,并在每个数字后添加一个随机较小字符(这里用0)来确保较长的数字排在前面 $str1 = $a . '0'; $str2 = $b . '0'; if ($str1 == $str2) { return 0; } return ($str1 > $str2) ? -1 : 1; }); // 排除数组首位为0的情况 if ($nums[0] == 0) { return '0'; } // 将数组转换为字符串并返回 return implode('', $nums); } // 示例用法 $nums = [12, 34, 5, 6, 7]; echo largestNumber($nums); // 输出 76543212 ``` #### Python 示例 ```python def largestNumber(nums): # 使用自定义的排序key,将数字转为字符串后进行比较 nums_sorted = sorted(nums, key=str, reverse=True) # 排除首位为0的情况 if nums_sorted[0] == 0: return '0' # 将列表转换为字符串并返回 return ''.join(map(str, nums_sorted)) # 示例用法 nums = [12, 34, 5, 6, 7] print(largestNumber(nums)) # 输出 76543212 ``` #### JavaScript 示例 ```javascript function largestNumber(nums) { // 使用数组的sort方法和自定义比较函数 nums.sort((a, b) => { // 字符串比较,注意JavaScript中字符串比较已足够处理这个问题 return (b + '').localeCompare(a + '', undefined, { numeric: true }); }); // 排除首位为0的情况 if (nums[0] === 0) { return '0'; } // 将数组转换为字符串并返回 return nums.join(''); } // 示例用法 const nums = [12, 34, 5, 6, 7]; console.log(largestNumber(nums)); // 输出 76543212 ``` **码小课**:在解决这类问题时,理解题目要求和限制条件非常重要。同时,掌握不同编程语言中数组排序和字符串处理的函数和方法也是关键。码小课网站中有更多关于算法和数据结构的内容,可以帮助大家深入学习并提升编程能力。
推荐面试题