leetcode 2231. Número más grande después de intercambios de dígitos por paridad (python)

¡Acostúmbrate a escribir juntos! Este es el día 12 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

describir

Se le da un número entero positivo. Puede intercambiar dos dígitos cualesquiera de num que tengan la misma paridad (es decir, ambos dígitos impares o ambos dígitos pares).

Devuelve el mayor valor posible de num después de cualquier número de intercambios.

Ejemplo 1:

Input: num = 1234
Output: 3412
Explanation: Swap the digit 3 with the digit 1, this results in the number 3214.
Swap the digit 2 with the digit 4, this results in the number 3412.
Note that there may be other sequences of swaps but it can be shown that 3412 is the largest possible number.
Also note that we may not swap the digit 4 with the digit 1 since they are of different parities.
复制代码

Ejemplo 2:

Input: num = 65875
Output: 87655
Explanation: Swap the digit 8 with the digit 6, this results in the number 85675.
Swap the first digit 5 with the digit 7, this results in the number 87655.
Note that there may be other sequences of swaps but it can be shown that 87655 is the largest possible number.
复制代码

Nota:

1 <= número <= 10^9

Analizar gramaticalmente

De acuerdo con el significado de la pregunta, déle un número entero positivo, la pregunta requiere que se puedan intercambiar dos números impares o dos números pares de dos dígitos en num, que se pueden intercambiar innumerables veces, y finalmente devuelve el posible valor máximo de num después del cambio.

Cuando leí esta pregunta durante la competencia, pensé que era muy simple y que el código que escribí era un poco extenso. Siempre quise optimizar el código, pero me di por vencido debido al evento. Era apestoso y largo. , solo para descubrir que ellos y yo escribimos al mismo nivel, e instantáneamente perdimos el deseo de optimizar el código.

De hecho, esta pregunta examina principalmente las operaciones básicas y la clasificación simple de matrices. La idea es bastante simple:

  • Cambie num para enumerar números, porque las cadenas no se pueden modificar en las posiciones de índice
  • Saque los números pares en nums y colóquelos en A, y luego ordene A en orden descendente
  • Coloque los elementos en A en orden descendente y luego vuelva a colocarlos en números en la posición par anterior
  • Saque los números impares en nums y póngalos en B, y luego ordene B en orden descendente
  • Coloque los elementos en B en orden descendente y luego vuelva a colocarlos en números en las posiciones impares anteriores
  • Concatenar números en una cadena y devolverlo

La complejidad temporal es O(N + NlogN) y la complejidad espacial es O(N).

responder

class Solution(object):
    def largestInteger(self, num):
        """
        :type num: int
        :rtype: int
        """
        nums = list(str(num))
        N = len(nums)
        A = [i for i in nums if int(i)%2 == 0]
        A.sort()
        A = A[::-1]
        n = 0
        for i in range(N):
            if int(nums[i])%2 == 0:
                nums[i] = A[n]
                n += 1
        B = [i for i in nums if int(i)%2 == 1]
        B.sort()
        B = B[::-1]
        n = 0
        for i in range(N):
            if int(nums[i])%2 == 1:
                nums[i] = B[n]
                n += 1
        return int(''.join(nums))		
复制代码

resultado de la operación

238 / 238 test cases passed.
Status: Accepted
Runtime: 34 ms
Memory Usage: 13.3 MB
复制代码

Enlace del título original

leetcode.com/contest/wee…

Tu apoyo es mi mayor motivación.

Supongo que te gusta

Origin juejin.im/post/7085517090504835109
Recomendado
Clasificación