Leetcode Letter Combinations of a Phone Number DFS
阿新 • • 發佈:2019-01-25
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; };