题目:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
思路:回溯法,拿到组合中的一个字符,用它来和另一个组合的所有字符进行配对,递归边界的条件是组合的字符个数满足输入字符串的长度。比如输入23(字符串长度为2)-> ab(这个配对中有两个字符),配对中有两个字符满足输入的字符串长度2。这里采用了回溯递归来完成,开销太大,BFS或许是更好的选择。
class Solution { private: vector<string> res; const string map[ 10 ] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz",}; void combination( string &str, int index, string combStr ) { if( combStr.size() == str.size() ) { //匹配满足要求了 res.push_back( combStr ); return; } char c = str[ index ]; string transStr = map[ c - '0' ]; for( int i = 0; i < transStr.size(); ++i ) { combination( str, index + 1, combStr + transStr[ i ] ); // 输入数字串 下一个数字 当前数字的对应字符串的每一个和下一个数字对应的字符串中的每一个字符匹配 } return; } public: vector<string> letterCombinations(string digits) { if( digits.size() == 0 ) return vector<string>(); combination( digits, 0, "" ); return res; } };