Gidhub BE Developer

LeetCode : 66. Plus One

2020-12-08
goodGid

66. Plus One

Problem

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.

Example

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.

Code (20. 12. 08)

Wrong Code

class Solution {
    public int[] plusOne(int[] digits) {
        int ans = 0;
        for (int i = 0; i < digits.length; i++) {
            ans += digits[i] * Math.pow(10, digits.length - 1 - i); // [1]
        }
        ans += 1;

        String ansTypeOfString = String.valueOf(ans);

        int[] ansArray = new int[ansTypeOfString.length()];

        for (int i = 0; i < ansTypeOfString.length(); i++) {
            ansArray[i] = ans / (int) Math.pow(10, ansTypeOfString.length() - 1 - i);
            ans %= (int) Math.pow(10, ansTypeOfString.length() - 1 - i);
        }
        return ansArray;
    }
}
  • 부분적으로 맞지만 Accept을 받지 못하는 코드다.

    그 이유는 [1]을 보면 int[]에 있는 값을 int로 변환을 해주는데

    Input으로 [9,8,7,6,5,4,3,2,1]이 들어오면 Int 자릿수를 초과하게 된다.

    이 부분을 고려 못해서 틀리고

    다른 방향으로 접근해서 풀었다.

Accept Code

class Solution {
    public int[] plusOne(int[] digits) {

        int length = digits.length;

        for (int i = length - 1; i >= 0; i--) {
            if (digits[i] + 1 < 10) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }

        // Should Format : 0 or 00 or 000
        int[] ansArray = new int[length+1];
        ansArray[0] = 1;
        return ansArray;
    }
}
  • Accept 아이디어는 다음과 같다.

    ( arr[n] + 1 ) = 10 –> arr[n-1] += 1

    ( arr[n] + 1 ) != 10 –> arr[n] += 1


Reference


Comments

Index