문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 digits가 주어지고, 각 digits[i]는 정수의 i번째 자리 숫자이다. 숫자는 가장 중요한 자리에서 가정 덜 중요한 자리로 왼쪽에서 오른쪽 순으로 정렬된다. 정수는 제일 앞에 0을 포함하지 않는다.
정수에 1을 더하고 숫자 배열로 반환해라.
#1
Input: digits = [1, 2, 3]
Output: [1, 2, 4]
Explanation: 배열은 정수 123을 나타낸다.
1을 더하면 123 + 1 = 124가 된다.
따라서 결과는 [1, 2, 4]이다.
#2
Input: digits = [4, 3, 2, 1]
Output: [4, 3, 2, 2]
Explanation: 배열은 정수 4321을 나타낸다.
1을 더하면 4321 + 1 = 4322가 된다.
따라서 결과는 [4, 3, 2, 2]이다.
#3
Input: digits = [9]
Output: [1, 0]
Explanation: 배열은 정수 9를 나타낸다.
1을 더하면 9 + 1 = 10이다.
따라서 결과는 [1, 0]이다.
주어진 배열의 마지막 인자에 1을 더하면 되는 문제이다.
정수 lastIdx를 선언하고 digits.length - 1을 할당한다.
int lastIdx = digits.length - 1;
마지막 인덱스에 있는 정수를 먼저 증가시켜준다.
digits[lastidx]++;
for문을 통해 순회하면서 해당 인덱스에 있는 숫자가 10일 경우, 해당 자리를 0으로 바꾸고, 앞자리 숫자에 1을 더한다.
for(int i = lastIdx; i > 0; i--){
if(digits[i] == 10){
digits[i] = 0;
digits[i - 1]++;
}else{
break;
}
}
for문을 빠져나오고 결과를 반환해야 하는데, digits[0]가 10일 수 있어서 처리를 해줘야한다. 반환할 정수 배열 result를 선언하고 digits.length + 1로 생성한다. 0번째와 1번째에 각각 1과 0을 할당한다.
만약 digits.length가 2보다 크면 digits의 인자들 각 자리에 할당한다.
if(digits[0] == 10){
int[] result = new int[digits.length + 1];
result[0] = 1;
result[1] = 0;
for(int i = 2; i < result.length; i++){
result[i] = digits[i - 1];
}
return result;
}
digits[0]이 10이 아닌 경우에는 digits를 반환하면 된다.
return digits;
class Solution {
public int[] plusOne(int[] digits) {
int lastIdx = digits.length - 1;
digits[lastIdx]++;
for(int i = lastIdx; i > 0; i--){
if(digits[i] == 10){
digits[i] = 0;
digits[i - 1]++;
}else{
break;
}
}
if(digits[0] == 10){
int[] result = new int[digits.length + 1];
result[0] = 1;
result[1] = 0;
if(digits.length > 2){
for(int i = 2; i < result.length; i++){
result[i] = digits[i - 1];
}
}
return result;
}
return digits;
}
}