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"].
image.png
思路:
這道題讓我們球電話號碼的字母組合,即數(shù)字2到9中每個數(shù)字可以代表若干個字母,然后給出一串數(shù)字,求出所有肯呢個的組合,類似的題目有全排列問題,combinations問題 subsets子集合等,用遞歸來解。首先建立一個字典數(shù)組來記錄每個字母對應(yīng)的數(shù)字。然后還需要一個變量level來記錄當前生成的字符串的字符個數(shù),當?shù)扔跀?shù)字長度時就停止遍歷,彈出最后一個數(shù),接著往下找可能的情況,代碼如下:
var letterCombinations = function(digits) {
var res=[];
if(digits.length==0) return res;
var dict=['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
DFS(digits,0,dict,"",res);
return res;
function DFS(digits,level,dict,out,res){
if(level==digits.length){
res.push(out);
}else{
var str=dict[digits[level]-2];
for (var i = 0; i < str.length; i++) {
out+=str[i];
DFS(digits,level+1,dict,out,res);
out=out.substr(0,out.length-1);
}
}
}
};