給定一個(gè)僅包含數(shù)字2-9的字符串啼辣,返回所有它能表示的字母組合御滩。
給出數(shù)字到字母的映射如下(與電話按鍵相同)鸥拧。注意 1 不對(duì)應(yīng)任何字母。
示例:
輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
說明:盡管上面的答案是按字典序排列的富弦,但是你可以任意選擇答案輸出的順序沟娱。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有腕柜。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)济似,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處盏缤。
更多更好答案:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/dian-hua-hao-ma-de-zi-mu-zu-he-by-leetcode/
這道題我是用了笛卡爾積運(yùn)算的砰蠢,在此做個(gè)記錄
代碼如下:
class Solution {
? ? /**
? ? * @param String $digits
? ? * @return String[]
? ? * array_shift 刪除第一個(gè)元素唉铜,并返回刪除的元素的值(其實(shí)就是返回第一個(gè)元素的值)
? ? *?array_merge_recursive 把兩個(gè)數(shù)組合并為一個(gè)數(shù)組台舱,如果有鍵名相同值不同的潭流,就會(huì)將值合并到一個(gè)數(shù)組中竞惋,共同指向這個(gè)鍵
? ? */
? ? function letterCombinations($digits) {
? ? ? ? if(!$digits){
? ? ? ? ? ? return [];
? ? ? ? }
? ? ? ? $arr=[
????????????0=>[],
????????????1=>[],
? ? ? ? ? ? 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'],
? ? ? ? ];
? ? ? ? $numarr=str_split($digits);
? ? ? ? $newdigits=[]; //構(gòu)造出需要運(yùn)算的數(shù)組
? ? ? ? foreach($numarr as $v){
? ? ? ? ? ? $newdigits[]=$arr[$v];
? ? ? ? }
? ? ? ? $arr1=[];
? ? ? ? $result=array_shift($newdigits); //刪除并獲取數(shù)組($newdigits) ?中第一個(gè)元素的值
? ? ? ? while ($arr2=array_shift($newdigits)){ //在新數(shù)組($?newdigits)中刪除并獲取第一個(gè)元素的值
? ? ? ? ? ? $arr1=$result;
? ? ? ? ? ? $result=[];?
? ? ? ? ? ? foreach ($arr1 as $value) {
? ? ? ? ? ? ? ? foreach ($arr2 as $value1) {
? ? ? ? ? ? ? ? ? ? $result[]=$value.''.$value1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return $result;
? ? }
}