Неделя 276 литкода
Первый вопрос
разбить строку на группы длины k
Идея этого вопроса состоит в том, чтобы перепрыгнуть через цикл, чтобы вывести k
значение одинаковой длины каждого сегмента.Если конечная длина может быть меньше , k
ее необходимо добавить fill
, и fill
добавляемое число равно k - 剩余字符的长度
. Окончательный вывод может быть.
Код может быть не очень оптимизирован, но я надеюсь, что он может помочь всем!
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
Временная сложность есть On
.
вопрос 2
Минимальное количество действий для получения целевого значения
Этот вопрос на самом деле является вопросом обдумывания, никаких дополнительных решений, таких как dp и dfs, не требуется. Из вопроса есть два способа увеличить число, пока не будет получено целевое значение.
-
При увеличении , текущее целочисленное значение увеличивается на 1 (т.е.
x = x + 1
). -
Double удваивает значение текущего целого числа (т.е.
x = 2 * x
).Поскольку задан вопрос о целевом значении, нам нужно оценить, сколько шагов требуется для достижения целевого значения. Нам не нужно использовать фиксированное мышление для этого вопроса — начиная с 1 для сложения или умножения, мы можем обратить вспять и использовать целевое значение, указанное в вопросе, для выполнения вычитания и деления. Запишите общее количество шагов, пока целевое значение не станет 1.
Блок кода:
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
Вопрос 3
решать интеллектуальные задачи
Этот вопрос заставил меня почувствовать, что я был тем 智力有问题
, кто знал, что этот вопрос решается с помощью dp, но я просто не мог его написать.Я застрял здесь больше часа, потому что я немного нервничал, когда я впервые участвовал в еженедельном конкурсе.Не написано.
Вижу, что есть прямое дп и обратное дп для решения.По сути две идеи одинаковые, но реверс чуть удобнее, но я все же использую форвард хахаха.
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)]
Суммировать
Подводя итоги этого еженедельного соревнования, я впервые участвую в еженедельном соревновании после данка с силой кисти, и, честно говоря, я все еще немного нервничаю. В третьем вопросе видно, что это решение дп, но т.к. дп не очень скилл, жаль останавливаться на достигнутом, но я верю, что с медленным прогрессом, я обязательно выиграю его в будущем. Четвёртый вопрос я не читала.Вот этого мне не хватает.Я надеюсь, что смогу выйти с ac в будущем, и я также надеюсь, что все смогут пройти ac до конца и смело идти вперёд! !