본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 1291. Sequential Digits

by jinwo_o 2024. 9. 5.

1291. Sequential Digits

An integer has sequential digits if and only if each digit in the number is one more than the previous digit.

 

Return a sorted list of all the integers in the range [low, high] inclusive that have sequential digits.

정수는 숫자의 각 숫자가 이전 숫자보다 하나 더 큰 경우에만 연속 숫자를 갖습니다.

연속 숫자가 있는 [낮음, 높음] 범위(포함)의 모든 정수의 정렬된 목록을 반환합니다.

 

Example 1:

Input: low = 100, high = 300

Output: [123,234]

 

Example 2:

Input: low = 1000, high = 13000

Output: [1234,2345,3456,4567,5678,6789,12345]

 

Constraints:

  • 10 <= low <= high <= 10^9

코드 1

class Solution {
    fun sequentialDigits(low: Int, high: Int): List<Int> {
        val answer = mutableListOf<Int>()

        for (i in 1..9) {
            var temp = i
            for (j in i + 1..9) {
                temp = temp * 10 + j

                if (temp in low..high) {
                    answer.add(temp)
                } else if (temp > high) {
                    break
                }
            }
        }

        return answer.sorted()
    }
}

 

코드 2

  • Deque 를 이용해서 10 으로 나눈 나머지가 9(마지막 숫자) 보다 작을 경우, 다음 연속 숫자를 Queue 에 추가한다.
class Solution {
    fun sequentialDigits(low: Int, high: Int): List<Int> {
        val answer = mutableListOf<Int>()
        val queue = ArrayDeque((1..9).toList())

        while (queue.isNotEmpty()) {
            val n = queue.removeFirst()
            if (n > high) {
                continue
            }

            if (n in low..high) {
                answer.add(n)
            }

            val ones = n % 10
            if (ones < 9) {
                queue.add(n * 10 + (ones + 1))
            }
        }

        return answer
    }
}