Plus One

https://leetcode.com/problems/plus-oneEasy

Условие

Дан массив цифр, представляющий неотрицательное целое число, где каждая цифра находится в отдельной ячейке. Нужно прибавить 1 к числу и вернуть результат в виде нового массива.

Примеры

Input: digits = [1, 2, 3]

Output: [1, 2, 4]

Explanation: Число 123 + 1 = 124.
Input: digits = [4, 3, 2, 1]

Output: [4, 3, 2, 2]

Explanation: Число 4321 + 1 = 4322.
Input: digits = [9]

Output: [1, 0]

Explanation: Число 9 + 1 = 10.

Решение

fun plusOne(digits: IntArray): IntArray {
    // Проходим массив справа налево, начиная с последней цифры
    for (i in digits.size - 1 downTo 0) {
        // Если текущая цифра меньше 9, просто увеличиваем её на 1 и возвращаем результат
        if (digits[i] < 9) {
            digits[i]++
            return digits
        }
        // Если цифра 9, то превращаем её в 0 и продолжаем цикл
        digits[i] = 0
    }
    
    // Если все цифры были 9, то требуется дополнительный разряд
    val result = IntArray(digits.size + 1)
    result[0] = 1 // Устанавливаем первый разряд в 1, так как 999 + 1 = 1000
    return result
}

Временная сложность

O(n), где n — количество цифр в массиве.

Пространственная сложность

O(1), если не учитывать результат, или O(n) в случае, когда требуется добавление разряда.