文章目录
- 1. 题目信息
- 2. 解题
1. 题目信息
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
2. 解题
类似题目:程序员面试金典 - 面试题 16.20. T9键盘(数组)
- 先创建哈希映射表
- 然后暴力回溯
class Solution {
public:vector<string> letterCombinations(string digits) {if(digits.empty())return {};string temp;vector<string> ans;unordered_map<char,vector<char> > v;v['2'] = {'a','b','c'};v['3'] = {'d','e','f'};v['4'] = {'g','h','i'};v['5'] = {'j','k','l'};v['6'] = {'m','n','o'};v['7'] = {'p','q','r','s'};v['8'] = {'t','u','v'};v['9'] = {'w','x','y','z'};bt(v,digits,temp,ans,0);return ans;}void bt(unordered_map<char,vector<char> > &v, string &digits, string temp, vector<string> &ans, int i){if(i == digits.size()){ans.push_back(temp);return;}vector<char> ch = v[digits[i]]; for(auto it = ch.begin(); it != ch.end(); ++it){temp.push_back(*it);bt(v,digits,temp,ans,i+1);temp.pop_back();}}
};