Leetcode - 66. Plus One

숲사람·2022년 5월 27일
0

멘타트 훈련

목록 보기
41/237

문제

주어진 배열이 10수의 각 자릿수를 나타낼때, 1을 더한 값을 배열로 리턴하라.

Input: digits = [4,3,2,1]
Output: [4,3,2,2]

Input: digits = [9,9]
Output: [1,0,0]

해결 O(N)

거의 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;
    }
}
profile
기록 & 정리 아카이브 용도 (보다 완성된 글은 http://soopsaram.com/documentudy)

0개의 댓글