Given a string containing digits from 2-9
inclusive, 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. Note that 1 does not map to any letters.
Example:
Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
大概的意思就是传入数字字符串,每个数字映射到手机按键上相应的字母字符串,如例题:"23"
"2":对应按键上的字符串为:"abc","3":对应手机上的字符串为:"def"。所以两字符串组合成上面所给的
字符串数组。如此类推,代码如下:(PS:还是用js写的,用其他语言写可以参考下思路:) )
var numArr2=[''];
var letterCombinations = function(digits) {
var number = ['2','3','4','5','6','7','8','9'];
var arr = ["abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
//传入的字符串转为数组
var digitsArr = digits.split("");
var numArr=[],arr2=[],strArr=[];
for(var i=0;i<number.length;i++){
for(var j=0;j<arr.length;j++){
if(number[i]===digitsArr[j]){
//如果相等则取出下标,对应到arr数组里
numArr.push(i);
}
}
}
//遍历出数字对应的字母字符串,存取到arr2数组里
for(var k=0;k<numArr.length;k++){
arr2[k] = arr[numArr[k]];
}
//还是通过遍历,把每个数组下标对应的字符串转换为数组,传入函数group里
for(var m=0;m<arr2.length;m++){
strArr=group(arr2[m].split(""));
}
//仍然通过遍历,把数组下标对应的字符串组合长度不符合要求的删除
for(var m=0;m<strArr.length;){
if(strArr[m].length!=numArr.length){
strArr.splice(m,1);
//每删除一个后下标归零重新遍历(不过很耗时....)
m=0;
}else{
m++;
}
}
return strArr;
};
var count=0;
//声明一个字母组合的函数函数
function group(num){
var str=''
count++;
//每次进入函数,更新数组的长度len
var len=numArr2.length-1,length=0;
while(length<=len){
//最后还是通过遍历组合字母,哈哈
for(var i=0;i<num.length;i++){
str = numArr2[length];
str += num[i];
numArr2.push(str);
}
length++;
}
return numArr2;
}
//当传入"2"时输出为:
console.log(letterCombinations("2"));
//当传入"23"时输出为:
console.log(letterCombinations("23"));
//当传入为"234"时输出为:
在浏览器上测试输出没有问题,不过在LeetCode上测试上却出了问题,同样的传入"2",提交后却返回了空数组....不懂什么原因。