leetcode 17 电话号码的字母组合
一、题目描述
二、解题思路
整体思路
画出解决问题的决策树,我们可以采用回溯的方法来解决这个问题。
具体思路
以示例一为例,决策树如下:
(1)函数功能:dfs函数用于寻找index层开始的后面层的所有组合;
(2)递归出口:当path的长度等于digits的长度时,表示列举完整,将path加入ret;
(3)函数体:
<1>哈希表hash用于将数字字符与字符串对应起来;
<2>处理当前层,从0号位置到str.size()-1位置进行循环,将str[i]加入path;
<3>dfs递归处理下面一层;
<4>回溯,恢复现场;
三、代码实现
class Solution {vector<string> ret;string path;unordered_map<char,string> hash;
public:vector<string> letterCombinations(string digits) {if(digits.empty()) return ret;//填充hash表hash['2']="abc";hash['3']="def";hash['4']="ghi";hash['5']="jkl";hash['6']="mno";hash['7']="pqrs";hash['8']="tuv";hash['9']="wxyz";dfs(digits,0);return ret; }void dfs(string digits,int index){//递归出口if(path.size()==digits.size()){ret.push_back(path);return ;}char digit=digits[index];string str=hash[digit];for(int i=0;i!=str.size();i++){path.push_back(str[i]);//递归处理后面的层dfs(digits,index+1);//回溯path.pop_back();}}
};