LeetCode 第十七题 电话号码的之母组合
给定一个数字字符串,返回数字所有可能表示的字母组合。
下面给出数字到字母的映射(和电话号码一样)。
输入:数字字符串 “23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
在这里使用了队列思想。对于每一个数字,将其所对应的字母,添加到队列中的每一个元素中。这里参考了解题步骤中的Java代码。
C++
class Solution
{
public:
vector<string> letterCombinations(string digits)
{
vector<string> result=vector<string>();
if(digits.size()==0)
return result;
map<int,string>mapping;
///顺便回顾一下map的三种插入方法
mapping.insert(pair<int,string>(0,"0"));
mapping.insert(pair<int,string>(1,"1"));
mapping.insert(pair<int,string>(2,"abc"));
mapping.insert(map<int,string>::value_type(3,"def"));
mapping.insert(map<int,string>::value_type(4,"ghi"));
mapping.insert(map<int,string>::value_type(5,"jkl"));
mapping[6]="mno";
mapping[7]="pqrs";
mapping[8]="tuv";
mapping[9]="wxyz";
result.push_back("");
for(int i=0; i<digits.size(); i++)
{
int x = (digits[i]-'0');
int resultLength = result.size();
for(int j=0;j<resultLength;j++)
{
string s=result[0];
result.erase(result.begin());
for(int k=0;k<mapping[x].size();k++)
{
string current_s = s+mapping[x][k];
result.push_back(current_s);
}
}
}
return result;
}
};
Python
class Solution(object):
def letterCombinations(self, digits):
result = []
if len(digits) == 0:
return result
mapping = {0: "0", 1: "1", 2: "abc", 3: "def", 4: "ghi", 5: "jkl", 6: "mno", 7: "pqrs", 8: "tuv", 9: "wxyz"}
result = [""]
for i in range(len(digits)):
x = int(digits[i])
resultLength = len(result)
for j in range(resultLength):
s = result[0]
result.remove(s)
for k in range(len(mapping[x])):
current_s = s+mapping[x][k]
result.append(current_s)
return result
Java
public static List<String> letterCombinations(String digits) {
LinkedList<String> ans = new LinkedList<String>();
if (digits.isEmpty())
return ans;
String[] mapping = new String[] { "0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
ans.add("");
for (int i = 0; i < digits.length(); i++) {
int x = Character.getNumericValue(digits.charAt(i));
while (ans.peek().length() == i) {
String t = ans.remove();
for (char s : mapping[x].toCharArray())
ans.add(t + s);
}
}
return ans;
}