Plus One

HeeSeong·2021년 8월 11일
0

LeetCode

목록 보기
4/38
post-thumbnail

🔗 문제 링크

https://leetcode.com/problems/plus-one/


❔ 문제 설명


Given a non-empty array of decimal digits representing a non-negative integer, increment one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.


⚠️ 제한사항


  • 1<=digits.length<=1001 <= digits.length <= 100

  • 0<=digits[i]<=90 <= digits[i] <= 9



💡 풀이 (언어 : Java)


단순하지만 생각보다 좀 까다로웠다. 그냥 생짜로 구현했다. 인강에서 본 배울만한 풀이는 훨씬 심플하다. 그대로 배열에서 올림수 처리할 때까지만 숫자들을 바꿔주고 앞에는 그대로 유지해서 반환한다. 혹시 모두 9999.. 이런 형태라서 크기가 증가할 때는 새로 사이즈가 1만큼 더 큰 배열을 선언하고 맨 앞의 수만 1로 바꿔주었다. 배열 선언 초기화시에 0으로 되기 때문에 뒤의 수들은 다 0으로 되어있다.

내 풀이

class Solution {
    public int[] plusOne(int[] digits) {
        ArrayList<Integer> list = new ArrayList<>();
        boolean countUp = false;
        for (int i = digits.length - 1; i >= 0; i--) {
            // 맨뒤의 숫자가 9일 경우 올리는지 여부 true, 0 넣기, 만약 길이가 1짜리면 0, 1넣고 종료
            if (i == digits.length - 1 && digits[i] == 9) {
                countUp = true;
                list.add(0);
                if (digits.length == 1)
                    list.add(1);
                continue;
            }
            // 만약 맨뒤의 숫자가 9미만 이면 +1 해주고 맨밑에서 나머지는 그냥 리스트에 넣기
            if (i == digits.length - 1) {
                list.add(digits[i] + 1);
                continue;
            }
            // 만약 올리는 수라면 9라면 0넣기, 만약 순서가 맨앞이라면 0,1 넣기
            // 9미만이라면 +1한 숫자 넣고, 나머지는 맨 밑에서 넣어주기
            if (countUp) {
                if (digits[i] == 9) {
                    list.add(0);
                    if (i == 0)
                        list.add(1);
                } else {
                    list.add(digits[i] + 1);
                    countUp = false;
                }
                continue;
            }
            // 남은 나머지 숫자들 넣어주기
            list.add(digits[i]);
        }
        int[] answer = new int[list.size()];
        // 리스트의 숫자는 역순이므로 정답 배열에 넣어줄때 뒤에서부터 넣기
        for (int i = list.size()-1; i >= 0; i--)
            answer[list.size()-1-i] = list.get(i);
        return answer;
    }
}

배울만한 풀이

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length-1; i >= 0; i--) {
            digits[i]++;
            if (digits[i] < 10)
                return digits;
            digits[i] = 0;
        }
        int[] answer = new int[digits.length+1];
        answer[0] = 1;
        return answer;
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글