Неделя 276 литкода

Неделя 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 до конца и смело идти вперёд! !

вставьте сюда описание изображения

рекомендация

отblog.csdn.net/m0_54355125/article/details/122574941
рекомендация