Open songyy5517 opened 1 year ago
思路:基于字符串比较的冒泡排序
复杂度分析:
import java.util.*;
public class Solution {
public String PrintMinNumber (int[] numbers) {
// write code here
// 分析:这道题的本质是数字的组合。最直接的方法是对所有数字进行
// 全排列,然后选出最小的数字。用新比较规则改进的冒泡排序。
// 1. 异常处理
if (numbers == null || numbers.length == 0)
return new String();
// 2. 冒泡排序
for (int i = 0; i < numbers.length; i++){
for (int j = 0; j < numbers.length - 1 - i; j++){
String a_str = numbers[j] + "";
String b_str = numbers[j + 1] + "";
if ((a_str + b_str).compareTo(b_str + a_str) > 0){
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
// 3. 数组转换成字符串
StringBuilder res = new StringBuilder();
for (int i = 0; i < numbers.length; i++)
res.append(numbers[i] + "");
return res.toString();
}
}
2023/3/6
2023/5/17
2023/11/29 2024/3/6
输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
示例1
示例2
示例3
分析 这道题的本质是元素排序。我们需要额外定义元素之间的比较规则:设a, b为两个数字,若字符串ab < ba,则 a < b。然后,我们基于新的比较规则对数组进行排序即可。