LeetCode OJ - Letter Combinations of a Phone Number
2014-07-03 10:08
459 查看
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.
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
思路一:hash表,DFS。
下面是AC代码,里面的测试用例输入"" 、期望输出[""],感觉没什么道理
思路二:组合问题,采用迭代方式解决。维护结果集ret,对于输入digits中的第i位对应字符串X,ret必须要根据当前状况和X对每一个ret[j]增加,即ret[j] + X[k]。因此是三维迭代。注意,这里ret[j] 有一个变为X.size()个,增加了X.size() - 1个。
此处要注意,ret.size是不断改变的,不能用来做循环判断(for j = 0 to ret.size() )
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.
思路一:hash表,DFS。
map<char, string> hash; DFS(s, start, item) { if(start == s.size()) { ret += item; return; } char cur = s[start]; for(i = start; i < hash[cur].size(); i++) { item += hash[cur][i]; DFS(s, start + 1, item); item -= hash[cur][i]; } }
下面是AC代码,里面的测试用例输入"" 、期望输出[""],感觉没什么道理
class Solution { map<char, string> hash; vector<string> ret; public: vector<string> letterCombinations(string digits) { int len = digits.size(); if(len == 0) { ret.push_back(""); return ret; } hash['0'] = ""; hash['1'] = ""; hash['2'] = "abc"; hash['3'] = "def"; hash['4'] = "ghi"; hash['5'] = "jkl"; hash['6'] = "mno"; hash['7'] = "pqrs"; hash['8'] = "tuv"; hash['9'] = "wxyz"; string item = ""; DFS(digits, 0, item); return ret; } void DFS(string &digits, int start, string item) { if(start == digits.size()) { ret.push_back(item); return ; } char cur = digits[start]; for(int i = 0; i < hash[cur].size(); i++) { item.push_back(hash[cur][i]); DFS(digits, start + 1, item); item.pop_back(); } } };
思路二:组合问题,采用迭代方式解决。维护结果集ret,对于输入digits中的第i位对应字符串X,ret必须要根据当前状况和X对每一个ret[j]增加,即ret[j] + X[k]。因此是三维迭代。注意,这里ret[j] 有一个变为X.size()个,增加了X.size() - 1个。
class Solution { public: vector<string> letterCombinations(string digits) { const string letters[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; vector<string> ret(1, ""); for (int i = 0; i < digits.size(); ++i) { for (int j = ret.size() - 1; j >= 0; --j) { const string &s = letters[digits[i] - '2']; //取出string for (int k = s.size() - 1; k >= 0; --k) { if (k) ret.push_back(ret[j] + s[k]); else ret[j] += s[k]; } } } return ret; } };
此处要注意,ret.size是不断改变的,不能用来做循环判断(for j = 0 to ret.size() )
相关文章推荐
- LeetCode OJ算法题(十八):Letter Combinations of a Phone Number
- LeetCode OJ - Letter Combinations of a Phone Number
- LeetCode OJ:Letter Combinations of a Phone Number
- LeetCode OJ-- Letter Combinations of a Phone Number ***
- LeetCode OJ:Letter Combinations of a Phone Number(数字字母组合)
- leetcode--Letter Combinations of a Phone Number
- 【LeetCode算法练习(C++)】Letter Combinations of a Phone Number
- [Leetcode 47] 17 Letter Combinations of a Phone Number
- [LeetCode] Letter Combinations of a Phone Number
- 【Leetcode】【Medium】Letter Combinations of a Phone Number
- [LeetCode][Java] Letter Combinations of a Phone Number
- LeetCode_17---Letter Combinations of a Phone Number
- 【17】Letter Combinations of a Phone Number
- Letter Combinations of a Phone Number
- leetcode第一刷_Letter Combinations of a Phone Number
- LeetCode: Letter Combinations of a Phone Number [018]
- Letter Combinations of a Phone Number
- LeetCode Letter Combinations of a Phone Number
- leetcode: Letter Combinations of a Phone Number
- LeetCode-17.Letter Combinations of a Phone Number