Problem
Key Point
- 인덱스가 0보다 크거나 carry가 있을 때까지 루프를 돌린다.
- (number + 1) % 10이 0인 경우 carry가 있는 것으로 판단한다.
- 전체 요소들을 다 돌고 나서 carray가 있는 경우 배열의 크기+1의 새로운 배열을 만들고 리턴한다.
Code
public class PlusOne {
public int[] solution(int[] digits) {
int carry = 1;
int index = digits.length - 1;
while (index >= 0 && carry > 0) {
digits[index] = (digits[index] + 1) % 10;
if (digits[index] == 0) {
carry = 1;
} else {
carry = 0;
}
--index;
}
if (carry == 1) {
digits = new int[digits.length+1];
digits[0] = 1;
}
return digits;
}
public static void main(String[] args) {
//int[] digits = {9,9,9};
int[] digits = {9,8,9};
PlusOne plusOne = new PlusOne();
int[] solution = plusOne.solution(digits);
for (int i = 0; i < solution.length; i++) {
System.out.println(solution[i]);
}
}
}
public int[] solution2(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
int d = (digits[i]+1) % 10;
digits[i] = d;
if (d != 0) {
break;
}
}
return digits;
}