주어진 배열이 10수의 각 자릿수를 나타낼때, 1을 더한 값을 배열로 리턴하라.
Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Input: digits = [9,9]
Output: [1,0,0]
거의 if/else 케이스를 생각해 풀었기 때문에 좋은 문제는 아닌듯. 모든 자릿수가 9일때만 1을 더했을때 자리수가 늘어나는 성질 이용. 100%
1. Constraints
- lenth <= 100
- decimal
2. Ideas
- only calc case num[last] == 9, the other return with +1
3. Test Cases
- [9]
- [9, 9]
- [1, 9]
- [9, 9, 9]
int* plusOne(int* digits, int digitsSize, int* returnSize){
*returnSize = digitsSize;
if (digits[digitsSize - 1] != 9) {
digits[digitsSize - 1]++;
return digits;
}
/* all of value are 9 -> sizeup */
bool allnine = true;
for (int i = 0; i < digitsSize; i++)
if (digits[i] != 9)
allnine = false;
if (allnine) {
*returnSize += 1;
int *ret = (int *)calloc(digitsSize + 1, sizeof(int));
ret[0] = 1;
for (int i = 1; i < digitsSize + 1; i++)
ret[i] = 0;
return ret;
} else {
int carry = 1;
for (int i = digitsSize - 1; i >= 0; i--) {
//printf("(%d)", digits[i]);
if (digits[i] + carry == 10) {
digits[i] = 0;
carry = 1;
} else {
digits[i] += carry;
carry = 0;
}
}
return digits;
}
}