Sword se refiere a la oferta 45. Organiza la matriz en el número más pequeño
Descripción del Título
Ideas para resolver problemas
Esta pregunta busca el número más pequeño para empalmar, lo cual es esencialmente un problema de clasificación . Matriz de cadenas Nums dispuesta entre dos números xey, la regla de clasificación predeterminada se determina como:
- Si la cadena concatenada x + y> y + x, entonces x es "mayor que" y;
- Por el contrario, si x + y <y + x, entonces x es "menor que" y;
x "menor que" y significa: después de ordenar, x debe estar a la izquierda de y en la matriz; "mayor que" es lo opuesto.
Agregado: compareTo()
métodos de clase de cadena para comparar dos cadenas de tamaño, parastr1.compareTo(str2)
- Si str1 == str2, el valor de retorno es 0;
- Si str1 <str2, devuelve un valor menor que 0;
- Si str1> str2, se devuelve un valor mayor que 0.
1. Ordenación personalizada de Arrays.sort
class Solution {
public String minNumber(int[] nums) {
//保存 nums 所有元素的 String 类型
String[] stringOfNums = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
stringOfNums[i] = String.valueOf(nums[i]);
}
Arrays.sort(stringOfNums, (x, y) -> (x + y).compareTo(y + x));
StringBuilder res = new StringBuilder();
for (String str : stringOfNums) {
res.append(str);
}
return res.toString();
}
}
2. Orden rápido personalizado
class Solution {
public String minNumber(int[] nums) {
//保存 nums 所有元素的 String 类型
String[] str = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
str[i] = String.valueOf(nums[i]);
}
quickSort(str, 0, nums.length - 1);
StringBuilder res = new StringBuilder();
for (String sub : str) {
res.append(sub);
}
return res.toString();
}
//自定义快速排序
public void quickSort(String[] str, int left, int right) {
if (left >= right) return;
int start = left, end = right;
String temp = str[start];
while (start < end) {
while (start < end && (str[end] + temp).compareTo(temp + str[end]) >= 0) end--;
str[start] = str[end];
while (start < end && (str[start] + temp).compareTo(temp + str[start]) <= 0) start++;
str[end] = str[start];
}
str[start] = temp;
quickSort(str, left, start - 1);
quickSort(str, start + 1, right);
}
}