方法1:バックトラック後戻り
回答読んで
考えを:
- 各弦の出力の長さは、入力された文字列の長さに等しいです
- 深さまで探索木対応の入力文字列の長さ(高さ)
- 長さからなる文字列の長さが入力文字列に等しい場合、文字列は、結果セットに追加する必要があり、その後、最後の文字¥削除され、新たな文字列に追加し、同じグループ¥組成物に参加しました
注:¥文字コードで、キーボード上の同じボタン上の同じグループを参照してください。
/** * @param {string} digits * @return {string[]} */
var letterCombinations = function(digits) {
if(digits == undefined || digits.length == 0) {
return [];
}
var keys = [];
keys.push(""); // 0
keys.push(""); // 1
keys.push("abc"); // 2
keys.push("def");
keys.push("ghi");
keys.push("jkl");
keys.push("mno");
keys.push("pqrs");
keys.push("tuv");
keys.push("wxyz");
var output = [];
doCombination(output, "", keys, digits);
return output;
};
function doCombination(output, prefix, keys, digits) {
if(prefix.length == digits.length) {
output[output.length] = prefix;
return;
}
var i = 0, index = Number(digits[prefix.length]);
// index:通过已有字符串prefix的长度,确定此时到了搜索树的第几层,即digits的哪一位
for(i = 0; i < keys[index].length; i++) { // 遍历相应层次字符
prefix += keys[index].charAt(i); // 衔接字符
doCombination(output, prefix, keys, digits);
prefix = prefix.substring(0, prefix.length - 1); // 去除字符
}
}