Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
同样,是利用dfs。
深搜复杂度O(3^n),空间复杂度O(n);
注意对字符串常量数组map的初始化方法【放在本地可能过不了得拿数组转】
此外将n和digits设置为全局的方式简直治愈~
class Solution {
public:
const vector<string> map {" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
int n;
string digits;
vector<string> letterCombinations(string digits) {
this->n=digits.size();
this->digits=digits;
vector<string> result;
if(n==0) return result;
string temp="";
generate(temp,0,0,result);
return result;
}
void generate(string temp,int step,int size,vector<string>& result){
if(step==n){
result.push_back(temp);
return;
}
//从step位置开始遍历
for(int i=size;i<n;i++){
for(int j=0;j<map[digits[i]-'0'].size();j++){
string pre=temp;
temp=temp+map[digits[i]-'0'][j];
generate(temp,step+1,i+1,result);
temp=pre;
}
}
}
};