电话号码字母组合

<?php
/**
 * 电话号码的字母组合
 *
 * User: hihone
 * Date: 2019/2/3
 * Time: 15:13
 * Description:
 * 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
 * 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
 * 输入:"23"
 * 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
 */

class Solution
{
    /**
     * @param $digits
     *
     * @return array
     */
    public function letterCombinations($digits)
    {
        if (empty($digits) || $digits == 1) return [];
        $digits = str_replace(['0', '1'], ['', ''], $digits);

        $values = [
            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'],
        ];
        $tmpArr = [];
        foreach (str_split($digits) as $digit) {
            if (!empty($digit) && $digit != 1) array_push($tmpArr, $values[$digit]);
        }
        $result = [];
        foreach ($tmpArr as $item) {
            $result = $this->combination($item, $result);
        }

        return $result;
    }

    /**
     * @param array $data
     * @param array $result
     *
     * @return array
     */
    private function combination(array $data, $result = [])
    {
        if (empty($result)) {
            return $data;
        }
        $i = 0;
        $_data = [];
        foreach ($data as $item) {
            foreach ($result as $key => $val) {
                $_data[] = $val . $item;
                $i++;
            }
        }

        return $_data;
    }
}

$digits = '23';
$s = new Solution();
print_r($s->letterCombinations($digits));#["mp","np","op","mq","nq","oq","mr","nr","or","ms","ns","os"]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意...
    vbuer阅读 195评论 0 0
  • 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注...
    闭门造折阅读 764评论 0 0
  • 题目介绍 题目:电话号码的字母组合描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字...
    大大纸飞机阅读 818评论 0 1
  • 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意...
    Gunther17阅读 679评论 0 0
  • 《3-6岁儿童学习与发展指南》解读 4~5岁幼儿的发展指标 1.身高和体重适宜。 4~5岁的幼儿比...
    欣欣_9961阅读 123评论 0 0