Это мое решение проблемы 66 на Leet Code.
Дан непустой массив цифр, представляющий неотрицательное целое число плюс единица к целому числу.
Цифры хранятся таким образом, что наиболее значимая цифра находится в начале списка, а каждый элемент в массиве содержит одну цифру.
Вы можете предположить, что целое число не содержит нуля в начале, кроме самого числа 0.
Пример 1:
Input: [1,2,3] Output: [1,2,4] Explanation: The array represents the integer 123.
Пример 2:
Input: [4,3,2,1] Output: [4,3,2,2] Explanation: The array represents the integer 4321.
Сначала выясняем, сколько элементов в массиве.
Наша цель - прибавить 1 к последней цифре. Итак, мы проходим через массив в обратном направлении, используя цикл for. Давайте назовем переменную нашего цикла for currentIndex.
Каждый элемент в массиве должен состоять из одной цифры. Итак, нам нужно увидеть, меньше ли цифра 9. Если цифра в currentIndex меньше 9, добавьте (приращение) 1, а затем верните массив.
Цель состоит в том, чтобы вернуть цифры, увеличенные на единицу. Если цифра в currentIndex не меньше 9, измените число на ноль.
Как и в обычной математической задаче, мы меняем 9 на 0, а затем переносим единицу на следующую цифру. Это означает, что мы снова проходим цикл for и проверяем следующее число. Если следующее число меньше 9, мы просто добавим 1 и вернем весь массив.
Что, если каждое число в массиве равно 9? Это наш крайний случай. Если каждое число в массиве равно 9, мы меняем каждое число на ноль и помещаем их в новый массив с пространством для еще одного элемента.
Затем мы меняем первый элемент на 1. Вот как мы его несем.
Наконец, мы возвращаем новый массив.
Давайте посмотрим на это в действии на первом примере массива выше:
Сначала мы выясняем, сколько элементов находится в массиве, и сохраняем это значение в переменной с именем arrayLength.
Затем мы входим в цикл for, двигаясь назад. Итак, мы начинаем с индекса 2.
Теперь мы спрашиваем, меньше ли число в currentIndex 9. Это так. Число в текущем индексе - 3.
Затем мы добавляем единицу к числу в currentIndex, а затем возвращаем массив. Теперь массив цифр [1, 2, 4].
Давайте посмотрим, как это работает в нашем пограничном случае с массивом [9,9]. Мы хотим вернуть array [1, 0, 0].
Сначала мы обнаруживаем, что массив состоит из 2 элементов, и сохраняем значение в нашей переменной arrayLength.
Теперь мы используем цикл for для обхода массива в обратном направлении, начиная с индекса 1.
Затем мы проверяем, меньше ли цифра в currentIndex 9. Это не так. поэтому мы меняем цифру на 0.
Мы снова проходим цикл for с индексом 0.
Число в currentIndex не меньше 9. Поэтому мы меняем его на ноль.
Мы достигли конца нашего цикла for. Теперь создаем новый массив с числами из цифр и добавляем место для еще одного элемента.
Затем мы переносим единицу, изменяя первую цифру в новом массиве на 1. Затем мы возвращаем новый массив, который равен [1, 0, 0]
Вы можете найти исходный код с примечаниями в моем профиле на github ..