https://leetcode.com/problems/letter-combinations-of-a-phone-number/
有一个trick 就是如果是输入"" 这个时候返回空
其他就是代码写的简洁的问题了
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int SIZE = 10+3;
class Solution {
public:
inline string getString(int num) {
switch (num) {
case 0 :
return " ";
case 1:
return "";
case 2:
return "abc";
case 3:
return "def";
case 4:
return "ghi";
case 5:
return "jkl";
case 6:
return "mno";
case 7:
return "pqrs";
case 8:
return "tuv";
case 9:
return "wxyz";
}
return "";
}
void dfs(string digits, int ptr, string now) {
if(ptr >= digits.size() && now.size()==digits.size()){
ans.push_back(now);
return;
}
for(int i=ptr;i<digits.size();i++) {
string str = getString(digits[i]-'0');
for(int j=0;j<str.size();j++) {
dfs( digits, i+1, now+str[j] );
}
}
}
vector<string> letterCombinations(string digits) {
ans.clear();
if(digits.size() == 0)return ans; //WA了一次
dfs(digits, 0, "");
return ans;
}
private:
vector <string> ans;
};
int main() {
Solution s;
int n;
string digits;
while(cin >> digits) {
vector<string> ans = s.letterCombinations(digits);
for(int i=0;i<ans.size();i++) {
cout << ans[i] << ", ";
}
cout << endl;
}
return 0;
}
一个漂亮的代码
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<string> letterCombinations(string digits) {
mapping = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> ret;
if(digits.size() == 0)return ret;
letterCombinationsCore(digits, "", ret);
return ret;
}
void letterCombinationsCore(string digits, string sub, vector<string> &ret) {
if (sub.size() == digits.size()) {
ret.push_back(sub);
} else {
int i = digits[sub.size()] - '0';
for (int j = 0; j < mapping[i - 2].size(); ++j) {
sub.push_back(mapping[i - 2][j]);
letterCombinationsCore(digits, sub, ret);
sub.pop_back();
}
}
}
vector<string> mapping;
};