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 k
el valor de la misma longitud de cada segmento.Si la longitud final puede ser menor que eso, k
debe agregarse fill
, y fill
el 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! !