LeetCode题解-17.电话号码的字母组合
题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
图片可参考一下代码想象
private string[] GetArray(char c) { switch (c) { case '2': return new string[3] { "a", "b", "c" }; case '3': return new string[3] { "d", "e", "f" }; case '4': return new string[3] { "g", "h", "i" }; case '5': return new string[3] { "j", "k", "l" }; case '6': return new string[3] { "m", "n", "o" }; case '7': return new string[4] { "p", "q", "r", "s" }; case '8': return new string[3] { "t", "u", "v" }; case '9': return new string[4] { "w", "x", "y", "z" }; default: return new string[0]; } }
思路
递归
代码
List<string> arrayString = new List<string>(); public IList<string> LetterCombinations(string digits) { if (digits.Length == 0) return arrayString; string[][] doubleArrayS = new string[digits.Length][]; for (int i = 0; i < doubleArrayS.Length; i++) { doubleArrayS[i] = GetArray(digits[i]); } backtrack(doubleArrayS, 0, ""); return arrayString; } private void backtrack(string[][] doubleArrayS, int i, string addS) { foreach (string s in doubleArrayS[i]) { string b = addS + s; int nextI = i + 1; if (nextI == doubleArrayS.Length) { arrayString.Add(b); } else { backtrack(doubleArrayS, nextI, b); } } } private string[] GetArray(char c) { switch (c) { case '2': return new string[3] { "a", "b", "c" }; case '3': return new string[3] { "d", "e", "f" }; case '4': return new string[3] { "g", "h", "i" }; case '5': return new string[3] { "j", "k", "l" }; case '6': return new string[3] { "m", "n", "o" }; case '7': return new string[4] { "p", "q", "r", "s" }; case '8': return new string[3] { "t", "u", "v" }; case '9': return new string[4] { "w", "x", "y", "z" }; default: return new string[0]; } }
浙公网安备 33010602011771号