Plus One - LeetCode

Can you solve this real interview question? Plus One - You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-

leetcode.com

문제

You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0's.

Increment the large integer by one and return the resulting array of digits.

Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].

Example 2:

Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].

Example 3:

Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits does not contain any leading 0's.

풀이

풀이 접근 과정

처음엔 그냥 맨 뒷자리만 +1을 하면 되겠구나 생각했다.

그런 경우 [9]가 [10]이 되면서 정답인 [1,0]이 되지 않았다.

그래서 그 부분만 예외처리를 해줬더니 [99]에서 문제가 생겼다.

그냥 IntArray를 int로 변환하여 +1을 해주고 다시 IntArray로 변환하는 방법을 택했다.

최종 소스코드

import kotlin.math.pow

class Solution {
    fun plusOne(digits: IntArray): IntArray {
        var num = 0
        digits.forEachIndexed { idx, i ->
            num += i * (10.0).pow(digits.size-1-idx).toInt()
        }
        val array = (++num).toString().toCharArray()
        return array.map { it.toString().toInt() }.toIntArray()
    }
}
  1. IntArray를 한자리씩 계산하여 Int로 변환하였다.
  2. 변환한 Int 값에 +1을 추가하였고, 이를 CharArray로 변환하였다.
  3. 변환한 CharArray를 map을 사용하여 안에 값들을 int로 바꾸고 IntArray로 변환하여 리턴하였다.
뿌꾸 빵