EASY
LEETCODE PROBLEM
--

0066 Plus One

Time O(n)
Space O(1)

Problema

Dado un entero grande representado como un array de dígitos digits, donde cada elemento es un dígito del número, sumar uno al número y devolver el array resultante. Los dígitos se almacenan de izquierda a derecha, del más significativo al menos significativo.

Solución

Recorremos el array de derecha a izquierda. Si el dígito actual es menor que 9, simplemente le sumamos 1 y retornamos: no hay acarreo que propagar. Si el dígito es 9, se convierte en 0 y continuamos con el siguiente dígito hacia la izquierda.

Si salimos del bucle sin retornar, significa que todos los dígitos eran 9 (por ejemplo, 999). En ese caso, todos quedaron en 0 y solo necesitamos insertar un 1 al inicio del array.

Implementación en Rust

impl Solution {
    pub fn plus_one(mut digits: Vec<i32>) -> Vec<i32> {
        for digit in digits.iter_mut().rev() {
            if *digit < 9 {
                *digit += 1;
                return digits;
            }
            *digit = 0;
        }
        digits.insert(0, 1);
        digits
    }
}