**Problem:**

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

**Solution:**

only need a carry variable

public class Solution {
public int[] plusOne(int[] digits) {
int carry = (digits[digits.length - 1] + 1) / 10;
digits[digits.length - 1] = (digits[digits.length - 1] + 1) % 10;
for (int i = digits.length - 2; i >= 0; i--) {
int temp = digits[i];
digits[i] = (carry + digits[i]) % 10;
carry = (carry + temp) / 10;
}
if (carry == 0) return digits;
int[] result = new int[digits.length + 1];
System.arraycopy(digits, 0, result, 1, digits.length);
result[0] = 1;
return result;
}
}

*Related*