题目: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.
![]()
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路:深搜+动态规划
思路就是,设置一个限制条件,满足位数,就存入,这是通用的,start代表digits里面的索引值。另外本程序并不需要判断是否start越界的,也能够通过,不过最好是判断下,现在还不能够说清楚为什么。
代码:
class Solution {
public:
//https://leetcode.com/problems/letter-combinations-of-a-phone-number/
vector<string> letterCombinations(string digits) {
string table[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};// (number:2-9)==(0-7)
vector<string> result;
if(digits.empty()){ //考虑输入为空的情况
return result;
}
string s;//缓存
combinationHelper(table,digits,0,s,result);//table[]不对
return result;
}
void combinationHelper(string table[],string &digits,int start,string &s,vector<string> &result){
if(start==digits.size()){
result.push_back(s);
return;
}//限制条件
int i=digits[start]-'2';
if(i<0||i>7){
return;//本来以为这句是没啥用的,只是后面start不断+1,会导致溢出,所以有用。
}
for(int j=0;j<table[i].size();j++){
s.push_back(table[i][j]);
combinationHelper(table,digits,start+1,s,result);
s.pop_back();
}
}
};