글 작성자: 이지원🌩️

입력으로 들어온 digitsletter에 접근하기 위한 인덱스로 변환한다. 그리고 백트랙킹으로 문자 조합을 구하면 된다. 다른 조합 문제와 크게 다를 게 없음


문제

https://leetcode.com/problems/letter-combinations-of-a-phone-number/


내가 작성한 코드

Swift

class Solution {
    func letterCombinations(_ digits: String) -> [String] {
        let letter: [[Character]] = [
            ["a", "b", "c"],
            ["d", "e", "f"],
            ["g", "h", "i"],
            ["j", "k", "l"],
            ["m", "n", "o"],
            ["p", "q", "r", "s"],
            ["t", "u", "v"],
            ["w", "x", "y", "z"]
        ]

        let digits = Array(digits).map { Int(String($0))! - 2 }
        let n = digits.count

        var answer = [String]()
        var picked = [Character]()
        var visited = Array(repeating: false, count: n)
        func pick(toPick: Int, start: Int) {
            if toPick == 0 {
                if !picked.isEmpty {
                    answer.append(String(picked))
                }
                return
            }
            for i in start..<n {
                for char in letter[digits[i]] {
                    if visited[i] {
                        continue
                    }
                    visited[i] = true
                    picked.append(char)
                    pick(toPick: toPick - 1, start: start + 1)
                    picked.removeLast()
                    visited[i] = false
                }
            }
        }
        pick(toPick: n, start: 0)
        return answer
    }
}
반응형