Plus one


Solution explained

I decided not to reverse the array and make a backwards looping. Base case is when adding one results in number that is less than 10. It means we can stop iterating and return updated array. If we made it to the beginning of the array and still have leftover we need to unshift one to the array head.

function plusOne(digits: number[]): number[] {
    const len = digits.length;
    let leftover = 1;
    for(let i = len - 1; i >= -1; i--){
        if(i === -1){
            if(leftover){
                digits.unshift(1)
            }
            break;
        }
        let afterInc = digits[i] + leftover;
        if(afterInc > 9){
            afterInc = 0;
            leftover = 1;
        }else{
            leftover = 0;
        }
        digits[i] = afterInc;
        if(leftover === 0){
            break;
        }
    }

    return digits
};

Performance

  • Runtime beats 100% - O(N)
  • Memory beats 88% - O(1)