From f7db9fd7ebb380110ebe53d687e0bd7c57924377 Mon Sep 17 00:00:00 2001 From: bqlin Date: Sat, 11 Dec 2021 18:15:56 +0800 Subject: [PATCH] =?UTF-8?q?0017.=E7=94=B5=E8=AF=9D=E5=8F=B7=E7=A0=81?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AF=8D=E7=BB=84=E5=90=88=EF=BC=9A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8E=92=E7=89=88=EF=BC=8C=E8=A1=A5=E5=85=85Swift?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0017.电话号码的字母组合.md | 54 +++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/problems/0017.电话号码的字母组合.md b/problems/0017.电话号码的字母组合.md index 0f99c879..58508e08 100644 --- a/problems/0017.电话号码的字母组合.md +++ b/problems/0017.电话号码的字母组合.md @@ -39,7 +39,7 @@ 可以使用map或者定义一个二位数组,例如:string letterMap[10],来做映射,我这里定义一个二维数组,代码如下: -``` +```cpp const string letterMap[10] = { "", // 0 "", // 1 @@ -79,7 +79,7 @@ const string letterMap[10] = { 代码如下: -``` +```cpp vector result; string s; void backtracking(const string& digits, int index) @@ -95,7 +95,7 @@ void backtracking(const string& digits, int index) 代码如下: -``` +```cpp if (index == digits.size()) { result.push_back(s); return; @@ -281,7 +281,7 @@ class Solution { ## Python **回溯** -```python3 +```python class Solution: def __init__(self): self.answers: List[str] = [] @@ -317,7 +317,7 @@ class Solution: self.answer = self.answer[:-1] # 回溯 ``` **回溯简化** -```python3 +```python class Solution: def __init__(self): self.answers: List[str] = [] @@ -420,7 +420,8 @@ var letterCombinations = function(digits) { }; ``` -C: +## C + ```c char* path; int pathTop; @@ -481,6 +482,47 @@ char ** letterCombinations(char * digits, int* returnSize){ } ``` +## Swift + +```swift +func letterCombinations(_ digits: String) -> [String] { + // 按键与字母串映射 + let letterMap = [ + "", + "", "abc", "def", + "ghi", "jkl", "mno", + "pqrs", "tuv", "wxyz" + ] + // 把输入的按键字符串转成Int数组 + let baseCode = ("0" as Character).asciiValue! + let digits = digits.map { c in + guard let code = c.asciiValue else { return -1 } + return Int(code - baseCode) + }.filter { $0 >= 0 && $0 <= 9 } + guard !digits.isEmpty else { return [] } + + var result = [String]() + var s = "" + func backtracking(digits: [Int], index: Int) { + // 结束条件:收集结果 + if index == digits.count { + result.append(s) + return + } + + // 遍历当前按键对应的字母串 + let letters = letterMap[digits[index]] + for letter in letters { + s.append(letter) // 处理 + backtracking(digits: digits, index: index + 1) // 递归,记得+1 + s.removeLast() // 回溯 + } + } + backtracking(digits: digits, index: 0) + return result +} +``` + -----------------------