美文网首页
Letter Combinations of a Phone N

Letter Combinations of a Phone N

作者: 瞬铭 | 来源:发表于2019-08-07 13:43 被阅读0次

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

image.png

遍历迭代的方法,基于每个数字,穷举出对应的字符串,并将结果集进行整合,需要注意的是

  • 每个数字对应的字母,是进行append的,所以每一个步骤的结果集,是需要统一进行存储
  • 每次循环的结果,是直接在结果集res上进行添加

a = '23'为例, 外层循环是遍历“2”,“3” 两个int,内部每次对单个数字对应的stringList再进行遍历,比如2=> ['a','b','c']的a,b,c进行遍历,所以需要将a,b,c三个字母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;
        }
    }

相关文章

网友评论

      本文标题:Letter Combinations of a Phone N

      本文链接:https://www.haomeiwen.com/subject/molgdctx.html