Sword se refiere a la oferta 45. Organiza la matriz en el número más pequeño

Sword se refiere a la oferta 45. Organiza la matriz en el número más pequeño

Descripción del Título

Inserte la descripción de la imagen aquí

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);
    }

}

Supongo que te gusta

Origin blog.csdn.net/cys975900334/article/details/115304537
Recomendado
Clasificación