package com.freetymekiyan.algorithms.level.easy;
/**
* Given a non-negative number represented as an array of digits, plus one to the number.
* <p>
* The digits are stored such that the most significant digit is at the head of the list.
* <p>
* Company Tags: Google
* Tags: Array Math
* Similar Problems: (M) Multiply Strings, (E) Add Binary, (M) Plus One Linked List
*/
public class PlusOne {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i] = 1 + digits[i];
if (digits[i] == 10) { // Carry.
digits[i] = 0;
} else { // No carry, just return.
return digits;
}
}
// Not returned, must have carry.
int[] ans = new int[digits.length + 1];
ans[0] = 1;
for (int i = 0; i < digits.length; i++) {
ans[i + 1] = digits[i];
}
return ans;
}
public int[] plusOneB(int[] digits) {
int count = digits.length;
while (count > 0) {
digits[count - 1] = digits[count - 1] + 1;
if (digits[count - 1] > 9) {
digits[count - 1] = 0;
} else {
return digits;
}
count--;
}
int[] result = new int[digits.length + 1];
result[0] = 1;
for (int i = 1; i < digits.length; i++) {
result[i] = digits[i - 1];
}
return result;
}
}