Leetcode Semana 276

Leetcode Semana 276

primera pregunta

dividir una cadena en grupos de longitud k

La idea de esta pregunta es saltar a través del ciclo para generar kel valor de la misma longitud de cada segmento.Si la longitud final puede ser menor que eso, kdebe agregarse fill, y fillel número que se agregará es k - 剩余字符的长度. La salida final puede ser.

Puede que el código no esté muy optimizado, ¡pero espero que pueda ayudar a todos!

class Solution:
    def divideString(self, s: str, k: int, fill: str) -> List[str]:
        res = []
        for i in range(k,len(s)+k,k):
            res.append(s[i-k:i])
        for i in res:
            if len(i) != k:
                res[-1] = i+fill*(k - len(i))
        return res

La complejidad del tiempo es On.

Pregunta 2

Número mínimo de acciones para obtener el valor objetivo

Esta pregunta es en realidad una pregunta de reflexión, no se necesitan soluciones avanzadas como dp y dfs. A partir de la pregunta, hay dos formas de aumentar el número hasta obtener el valor objetivo.

  • Incrementando , incrementa el valor entero actual en 1 (es decir, x = x + 1).

  • Double , duplica el valor del entero actual (es decir, x = 2 * x).

    Debido a que se ha dado la pregunta del valor objetivo, debemos juzgar cuántos pasos se necesitan para alcanzar el valor objetivo. No necesitamos usar el pensamiento fijo para esta pregunta: comenzando desde 1 para sumar o multiplicar, podemos invertir y usar el valor objetivo dado por la pregunta para realizar restas y divisiones. Registre el número total de pasos hasta que el valor objetivo sea 1.

    Bloque de código:

    class Solution:
        def minMoves(self, target: int, maxDoubles: int) -> int:
            res = 0
            while target != 1:
                if maxDoubles != 0 and target %2 ==0:
                    target = target /2
                    maxDoubles -= 1
                    res += 1
                elif maxDoubles == 0:
                    res += int(target - 1)
                    target = 1
                else:
                    target -= 1
                    res += 1
            return res
    

Pregunta 3

resolver problemas intelectuales

Esta pregunta me hizo sentir como si yo fuera el 智力有问题que sabía que esta pregunta se resolvió con dp, pero simplemente no podía escribirlo. He estado atrapado aquí por más de una hora, porque estaba un poco nervioso cuando participó en la competencia semanal por primera vez No escrito.

Veo que hay dp hacia adelante y dp hacia atrás para la solución, de hecho, las dos ideas son las mismas, pero la inversa es un poco más conveniente, pero yo sigo usando la hacia adelante jajaja.

class Solution:
    def mostPoints(self, questions: List[List[int]]) -> int:
        dp = [0 for i in range(len(questions) + 1)]
        for i in range(len(questions)):
            p,b = questions[i]
            dp[i+1] = max (dp[i+1],dp[i])
            j = min(len(questions),i + b + 1)
            dp[j] = max(dp[i] + p , dp[j])
        return dp[len(questions)]

Resumir

Para resumir esta competencia semanal, esta es la primera vez que participo en la competencia semanal desde la volcada con fuerza de pincel.Para ser honesto, todavía estoy un poco nervioso. En la tercera pregunta, se puede ver que es la solución de dp, pero como dp no es muy hábil, es una pena detenerse allí, pero creo que con el lento progreso, definitivamente lo ganaré en el futuro. No leí la cuarta pregunta. Aquí es donde me falta. Espero poder salir con ac en el futuro, ¡y también espero que todos puedan ac hasta el final y avanzar con valentía! !

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_54355125/article/details/122574941
Recomendado
Clasificación