给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
来源:力扣(LeetCode)
class Solution {
/**
* @param String $digits
* @return String[]
*/
function letterCombinations($digits) {
if (empty($digits)) {
return [];
}
// 先创建字典
$model = ["0","1","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
// 创建一个用于模拟队列的数组
$resultList = [''];
// 循环输入$digits
for ($i=0; $i < strlen($digits); $i++) {
// 先获取当前$i对应的输入的字符串
// 再使用intval 转成整形,用于根据键值对取对应的字符串
$mappIndex = intval($digits[$i]);
// 总是判断当前$resultList的第一个元素的字符长度是否等于当前$i
while (strlen($resultList[0]) == $i) {
// 将数组$resultList开头的单元移出数组
$head = array_shift($resultList);
$str = $model[$mappIndex];
for ($j=0; $j < strlen($str); $j++) {
$resultList[] = $head.$str[$j];
}
}
}
return $resultList;
}
}