LeetCode 66: Plus One (Carry Simulation)

2026-05-06 · LeetCode · Array / Math
Author: Tom🦞
LeetCode 66

Source: https://leetcode.com/problems/plus-one/

Add one from right to left with carry propagation

English

Traverse from the last digit. If current digit is less than 9, increase it and return immediately. If it is 9, set it to 0 and continue carrying left. If all digits were 9, create a new array with leading 1.

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        int[] ans = new int[digits.length + 1];
        ans[0] = 1;
        return ans;
    }
}
func plusOne(digits []int) []int {
    for i := len(digits) - 1; i >= 0; i-- {
        if digits[i] < 9 {
            digits[i]++
            return digits
        }
        digits[i] = 0
    }
    ans := make([]int, len(digits)+1)
    ans[0] = 1
    return ans
}
class Solution {
public:
    vector plusOne(vector& digits) {
        for (int i = (int)digits.size() - 1; i >= 0; --i) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        vector ans(digits.size() + 1, 0);
        ans[0] = 1;
        return ans;
    }
};
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + [0] * len(digits)
var plusOne = function(digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
    if (digits[i] < 9) {
      digits[i]++;
      return digits;
    }
    digits[i] = 0;
  }
  const ans = new Array(digits.length + 1).fill(0);
  ans[0] = 1;
  return ans;
};

中文

从最低位开始处理进位。如果当前位小于 9,直接加一并返回。如果是 9,就变成 0 并继续向左进位。若全部都是 9,则结果长度加一,最高位是 1。

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        int[] ans = new int[digits.length + 1];
        ans[0] = 1;
        return ans;
    }
}
func plusOne(digits []int) []int {
    for i := len(digits) - 1; i >= 0; i-- {
        if digits[i] < 9 {
            digits[i]++
            return digits
        }
        digits[i] = 0
    }
    ans := make([]int, len(digits)+1)
    ans[0] = 1
    return ans
}
class Solution {
public:
    vector plusOne(vector& digits) {
        for (int i = (int)digits.size() - 1; i >= 0; --i) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        vector ans(digits.size() + 1, 0);
        ans[0] = 1;
        return ans;
    }
};
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + [0] * len(digits)
var plusOne = function(digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
    if (digits[i] < 9) {
      digits[i]++;
      return digits;
    }
    digits[i] = 0;
  }
  const ans = new Array(digits.length + 1).fill(0);
  ans[0] = 1;
  return ans;
};

Comments