- Letter Combinations of a Phone N
- 算法练习--LeetCode--17. Letter Combi
- Letter Combinations of a Phone N
- Letter Combinations of a Phone N
- Letter Combinations of a Phone N
- Letter Combinations of a Phone N
- Algorithm-Letter Combinations of
- 017-Letter Combinations of a Pho
- leetcode 17. Letter Combinations
- [leetcode -- backtracking]Combin
https://leetcode.com/problems/letter-combinations-of-a-phone-number/submissions/
模拟手机键盘九宫格,输入对应的数字,输出所有可能的字符组合
思路1
递归,一系列的过程表明,就是将数字对应的字符串进行组合,但是数字有多少个不确定,所以可以用<输入信息,临时存储,最终结果>的相关递归方式进行嵌套,一个res表示最终结果,level表示进行到的输入digits的第几个字符,以level的层级作为递归结束的象征,当level没有结束时候,临时变量out作为存储中间结果string,当level结束时候,out作为其中一个结果添加到res的其中一个解法中
/**
* @param String $digits
* @return String[]
*/
function letterCombinations($digits) {
if(!$digits){
return [];
}
$res = [];
$mapping = [
2 => ['a', 'b', 'c'],
3 => ['d', 'e', 'f'],
4 => ['g', 'h', 'i'],
5 => ['j', 'k', 'l'],
6 => ['m', 'n', 'o'],
7 => ['p', 'q', 'r', 's'],
8 => ['t', 'u', 'v'],
9 => ['w', 'x', 'y', 'z'],
];
$this->letterCombinationDFS($digits, $mapping, 0, "", $res);
return $res;
}
function letterCombinationDFS($digits, &$mapping, $level, $out, &$res) {
if ($level == strlen($digits)) {
$res[] = $out;
return;
}
$str = $mapping[$digits[$level]];
for ($i = 0; $i < count($str); $i++) {
$this->letterCombinationDFS($digits,$mapping,$level+1,$out . $str[$i],$res);
}
}
思路2

遍历迭代的方法,基于每个数字,穷举出对应的字符串,并将结果集进行整合,需要注意的是
- 每个数字对应的字母,是进行append的,所以每一个步骤的结果集,是需要统一进行存储
- 每次循环的结果,是直接在结果集res上进行添加
以
res = ['a','b','c']。此时继续回到外层的遍历,下一步再进行3=>[''d'','e','f']进行遍历,并且将每一个遍历结果重新与res中的每一个结果进行全排列,此时变成$res = ['ad','bd,'cd','ae','be','ce','af','bf','cf']
function letter($digits) {
$res = [""];
$mapping = [
2 => ['a', 'b', 'c'],
3 => ['d', 'e', 'f'],
4 => ['g', 'h', 'i'],
5 => ['j', 'k', 'l'],
6 => ['m', 'n', 'o'],
7 => ['p', 'q', 'r', 's'],
8 => ['t', 'u', 'v'],
9 => ['w', 'x', 'y', 'z'],
];
for ($i = 0; $i < strlen($digits); $i++) {
$tmp = [];
$str = $mapping[$digits[$i]];
for ($j = 0; $j < count($str); $j++) {
foreach ($res as $s) {
$tmp[] = $s . $str[$j];
}
}
$res = $tmp;
}
}
网友评论