LeetCode: Letter Combinations of a Phone Number
입력으로 들어온 digits
을 letter
에 접근하기 위한 인덱스로 변환한다. 그리고 백트랙킹으로 문자 조합을 구하면 된다. 다른 조합 문제와 크게 다를 게 없음
문제
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 } }
반응형
댓글을 사용할 수 없습니다.