Given a string containing digits from 2-9
inclusive, 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. Note that 1 does not map to any letters.
Example:
Input: "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.
解题思路:暴力枚举法
class Solution {
public:
vector<string> letterCombinations(string digits) {
string a[]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string>result;
if(digits.length()==0)
return result;
result.push_back("");
for(int i=0;i<digits.size();i++){
vector<string>temp;
for(int j=0;j<a[digits[i]-'0'].length();j++)
for(int k=0;k<result.size();k++)
temp.push_back(result[k]+a[digits[i]-'0'][j]);
result=temp;
}
return result;
}
};
优化上述方法,由于需要将temp数组复制到result,耗费了大量时间,所以直接在result数组进行变化可以节省大量时间,需要记下的是erase的使用,直接括号内为迭代器。
C++
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string>result;
int len=digits.length();
if(len==0)
return result;
string a[]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
result.push_back("");
for(int i=0;i<len;i++){
int num=result.size();
for(int j=0;j<num;j++){
string temp=result[0];
result.erase(result.begin());
for(int k=0;k<a[digits[i]-'0'].length();k++)
result.push_back(temp+a[digits[i]-'0'][k]);
}
}
return result;
}
};
Python
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
results = [""]
a = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
for digit in digits:
temp = []
for result in results:
x = ord(digit) - ord('0')
for c in a[x]:
temp.append(result + c)
results = temp
return results
方法二:DFS遍历
这里值得注意的是动态数组的初始化
string *a=new string[10]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
另外string类型也可以使用push_back()和pop_back()
class Solution {
public:
vector<string>result;
string s,temp="";
string *a=new string[10]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
int len;
vector<string> letterCombinations(string digits) {
s=digits;
len=digits.length();
if(len==0)
return result;
dfs(0);
return result;
}
void dfs(int index){
if(index==len){
result.push_back(temp);
return;
}
for(int i=0;i<a[s[index]-'0'].length();i++){
temp+=a[s[index]-'0'][i];
dfs(index+1);
temp.pop_back();
}
}
};
Python
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
results = []
a = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
def dfs(index, temp):
if index == len(digits):
results.append(temp)
return
x = ord(digits[index]) - ord('0')
for c in a[x]:
dfs(index+1, temp+c)
dfs(0,"")
return results