179. 最大数
查看题目中等
字符串
低频
解法一:贪心算法
时间复杂度:O(n log n) | 空间复杂度:O(n) | 推荐使用
动画演示
准备就绪 - 输入数字数组(用逗号分隔),然后点击开始
代码实现
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String largestNumber(int[] nums) {
// 将每个数字转换为字符串
String[] strs = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strs[i] = String.valueOf(nums[i]);
}
// 使用自定义比较器排序
// 比较规则:如果 x + y > y + x,则 x 应该排在 y 前面
Arrays.sort(strs, new Comparator<String>() {
@Override
public int compare(String x, String y) {
return (y + x).compareTo(x + y);
}
});
// 处理所有数字都是0的情况
if (strs[0].equals("0")) {
return "0";
}
// 连接所有字符串
StringBuilder res = new StringBuilder();
for (String s : strs) {
res.append(s);
}
return res.toString();
}
}
// 测试代码
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
// 示例1
int[] nums1 = {10, 2};
System.out.println("示例1: " + solution.largestNumber(nums1)); // 输出: 210
// 示例2
int[] nums2 = {3, 30, 34, 5, 9};
System.out.println("示例2: " + solution.largestNumber(nums2)); // 输出: 9534330
// 示例3
int[] nums3 = {0, 0};
System.out.println("示例3: " + solution.largestNumber(nums3)); // 输出: 0
}
}时间复杂度:O(n log n)
空间复杂度:O(n)
通过自定义比较器将数组中的数字转换为字符串并排序,使得拼接后的数字最大。时间复杂度由排序决定,为O(n log n),空间复杂度为O(n)用于存储转换后的字符串数组。