简单的dfs遍历,0当做' '(空格),1不代表任何东西
/**
* @author johnsondu
* @problem Letter Combinations of a Phone Number
* @time O(n)
* @space O(n)
* @url https://leetcode.com/problems/letter-combinations-of-a-phone-number/
* @strategy dfs
* @status Accepted, runtime beats 8.19% of cpp submissions. 0ms
* @time 20:38 Nov 9th 2015
*/
class Solution {
public:
void dfs(int idx, string tmp, int len, string digits) {
if(idx == len) {
ans.push_back(tmp);
return;
}
if(digits[idx] == '0') dfs(idx + 1, tmp + ' ', len, digits);
else if(digits[idx] == '1') dfs(idx+1, tmp, len, digits);
else {
int p = digits[idx] - '2';
for(int j = 0; j < str[p].size(); j ++)
dfs(idx + 1, tmp + str[p][j], len, digits);
}
}
vector<string> letterCombinations(string digits) {
int len = digits.size();
if(len < 1) return ans;
dfs(0, string(""), len, digits);
return ans;
}
private:
const vector<string> str{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> ans;
};