Разбор задачи: Плюс один

Предложенный нами код решения:

def plus_one(digits):
    """
    Увеличивает большое число, представленное массивом цифр, на единицу.
    Возвращает результат в виде массива цифр.
    """
    # Проходим по массиву с конца
    for i in range(len(digits) - 1, -1, -1):
        if digits[i] < 9:
            digits[i] += 1
            return digits
        digits[i] = 0
    
    # Если все цифры равны 9, например [9], [9,9], то нужно добавить 1 в начало
    return [1] + digits

Функция plus_one(digits) увеличивает число, представленное массивом цифр, на единицу и возвращает результат в виде массива цифр.

Шаги решения:

  1. Проход по массиву с конца:
    • Мы начинаем с последней цифры (самого младшего разряда), потому что увеличение на единицу обычно начинается с младшего разряда.
    • Используется цикл for i in range(len(digits) - 1, -1, -1), который идет от последнего элемента массива до первого.
    • Важно, что мы двигаемся в обратном порядке, так как в числе с увеличением на единицу чаще всего изменяется именно младший разряд (первый).
  2. Проверка текущей цифры:
    • Для каждой цифры в массиве мы проверяем, меньше ли она 9: if digits[i] < 9.
      • Если цифра меньше 9, мы просто увеличиваем её на 1 и сразу возвращаем результат: digits[i] += 1 и return digits.
      • Это оптимальный случай, когда не происходит переноса. Например, для числа [1, 2, 3] результат будет [1, 2, 4].
  3. Обработка переноса:
    • Если текущая цифра равна 9, она превращается в 0, и мы переходим к следующей более значимой цифре.
    • Для этого: digits[i] = 0.
  4. Дополнение 1 в начале массива:
    • Если все цифры в массиве были 9, например, для числа [9] или [9, 9], то в результате все цифры становятся 0, и нам нужно добавить 1 в начало массива, чтобы корректно отобразить перенос, как в примере: [1, 0].
    • Это выполняется с помощью операции return [1] + digits.

Пример 1:

Вход: digits = [1, 2, 3]
Шаги:

  • Цифра 3 увеличивается на 1, получаем [1, 2, 4].
    Выход: [1, 2, 4]

Пример 2:

Вход: digits = [9]
Шаги:

  • Цифра 9 превращается в 0.
  • Нужно добавить 1 в начало массива.
    Выход: [1, 0]

Пример 3:

Вход: digits = [9, 9]
Шаги:

  • Первая цифра 9 становится 0, вторая цифра 9 также становится 0.
  • Добавляем 1 в начало.
    Выход: [1, 0, 0]

Пример 4:

Вход: digits = [4, 3, 2, 1]
Шаги:

  • Цифра 1 увеличивается на 1, получаем [4, 3, 2, 2].
    Выход: [4, 3, 2, 2]

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии