题意:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
解题思路:
使用深度优先搜索或者广度优先搜索都可以
我是用广度优先搜索
class Solution {
/**
* @param String $digits
* @return String[]
*/
function letterCombinations($digits) {
$a = array('','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz');
$n = strlen($digits);
if($n == 0) {
return [];
}
$digits = str_split($digits, 1);
$ans = array();
for($i = 0; $i < strlen($a[$digits[0]]); $i++) {
array_push($ans, $a[$digits[0]][$i]);
}
for($i = 1; $i < $n; $i++) {
$j = $digits[$i];
$len = count($ans); // 队列大小
for($u = 0; $u < $len; $u++) {
$s = $ans[0]; // 取队列第一个元素
for($k = 0; $k < strlen($a[$j]); $k++) {
$s1 = $s . $a[$j][$k];
array_push($ans, $s1); // 循环赋值添加到队列中
}
array_shift($ans); // pop出首个元素
}
}
return $ans;
}
}