# LeetCode – Plus One (Java)

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.

Java Solution

To solve this problem, we can use a flag to mark if the current digit needs to be changed.

```public int[] plusOne(int[] digits) { if(digits==null||digits.length==0) return new int[0];   int carry = 1; for(int i=digits.length-1; i>=0; i--){ int sum = digits[i]+carry; if(sum>=10){ carry=1; }else{ carry=0; } digits[i]=sum%10; }   if(carry==1){ int[] result = new int[digits.length+1]; System.arraycopy(digits, 0, result, 1, digits.length); result[0]=1; return result; }else{ //int[] result = new int[digits.length]; return digits; } }```
Category >> Algorithms >> Interview
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• Peeyush Chandel

``` public int[] plusOne(int[] digits) { int[] result = new int[digits.length]; boolean flag = true; for(int v : digits){ if(v!=9){ flag = false; break; } } if(flag){ result = new int[digits.length+1]; result[0] = 1; }```

``` ```

``` int carry = 0; int num = 0; for(int i = digits.length -1; i >= 0;i--){ if(i == (digits.length -1)){ num = digits[i] + 1; }else{ num = digits[i] + carry; } if(num >= 10){ num = num - 10; carry = 1; }else{ carry = 0; } if(flag){ result[i+1] =num; }else{ result[i] =num; } } return result; } ```

• Sudhakar R

Optimized the code to prevent additional looping

public static int[] plusOne(int[] digits) {
int len = digits.length;
for (int i = len – 1; i >= 0; i–) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i] = digits[i] + 1;
break;
}

if (i == 0 && digits[i] == 0) {
int[] y = new int[len + 1];
y[0] = 1;
for (int j = 1; j <= len; j++) {
y[j] = digits[j – 1];
}
digits = y;
}
}

return digits;
}

• Charles Gao

wrong answer

• Ankit Jain

public static int[] plusOne(int[] digits) {

int length = digits.length;

boolean flag = false;

for (int i = length – 1; i >= 0; i–) {

if (digits[i] == 9) {

flag = true;

digits[i] = 0;

} else if (flag) {

digits[i] = digits[i] + 1;

flag = false;

}

}

if (flag) {

int[] newArray = new int[digits.length + 1];

newArray[0] = 1;

System.arraycopy(digits, 0, newArray, 1, digits.length);

return newArray;

}

return digits;

}

• whikko

Slightly more readable version

public int[] plusOne(int[] digits) {
int len = digits.length;

for (int i = len – 1; i >= 0; –i) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
++digits[i];
return digits;
}
}
//we have to add a digit at the head
int[] y = new int[len + 1];
y[0] = 1;
for (int j = 1; j <= len; ++j) {
y[j] = digits[j – 1];
}
return y;
}