1 class Solution { 2 public: 3 vector<string> vec; 4 string temp; 5 void LetterCombinations(string digits,int len,map<char,string>nums_map,int index){ 6 if(index==len) 7 { vec.push_back(temp); 8 return;} 9 char strnum=digits[index]; 10 string strletter=nums_map[strnum]; 11 for(int i=0;i<strletter.size();++i){ 12 temp.push_back(strletter[i]); 13 LetterCombinations(digits,len,nums_map,index+1); 14 temp.pop_back(); 15 } 16 } 17 vector<string> letterCombinations(string digits) { 18 map<char,string> nums_map; 19 nums_map['0']=""; 20 nums_map['1']=""; 21 nums_map['2']="abc"; 22 nums_map['3']="def"; 23 nums_map['4']="ghi"; 24 nums_map['5']="jkl"; 25 nums_map['6']="mno"; 26 nums_map['7']="pqrs"; 27 nums_map['8']="tuv"; 28 nums_map['9']="wxyz"; 29 if(digits.size()==0) 30 return vec; 31 LetterCombinations(digits,digits.size(),nums_map,0); 32 return vec; 33 } 34 35 };
这道题刚开始写错了,leetcode也没有提示,最后复制到vs上,提醒我下标越界了。。原来是我的递归函数写错了,我写成了
LetterCombinations(digits,len,nums_map,++index);//错误!!
如果写成index++,那么改变的就是index的值,最终回溯的时候,就会导致越界