• 17. Letter Combinations of a Phone Number


    package LeetCode_17
    
    /**
     * 17. Letter Combinations of a Phone Number
     * https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
     *
     * Given a string containing digits from 2-9 inclusive,
     * return all possible letter combinations that the number could represent.
    A mapping of digit to letters (just like on the telephone buttons) is given below.
    Note that 1 does not map to any letters.
    
    Example:
    Input: "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    
    Note:
    Although the above answer is in lexicographical order, your answer could be in any order you want.
     * */
    class Solution {
        /*
        * solution: backtracking + dfs;
        * Time complexity:O(4^n), because each button has 4 letter;
        * Space complexity:O(4^n), because result.add each calculate
        * */
        fun letterCombinations(digits: String): List<String> {
            //create a mapping for each button
            val map = arrayOf("", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz")
            val result = ArrayList<String>()
            val cur = StringBuilder()
            dfs(0, digits, cur, map, result)
            return result
        }
    
        private fun dfs(index: Int, digits: String, cur: StringBuilder, map: Array<String>, result: ArrayList<String>) {
            if (index == digits.length) {
                result.add(cur.toString())
                return
            }
            //set the index for get string from map
            val i = digits[index] - '0'
            //found out string for split
            val string = map.get(i)
            for (c in string) {
                cur.append(c.toString())
                dfs(index + 1, digits, cur, map, result)
                //clean last for next level
                cur.deleteCharAt(cur.lastIndex)
            }
        }
    }
  • 相关阅读:
    Android SDK 国内镜像及配置方法
    Python多线程学习
    JProfiler 8下载地址和注册码
    Python自动化测试工具Splinter简介和使用实例
    linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法
    Linux系统安装VMware Tools
    CentOS minimal网络设置
    接口测试之webservice
    VirtualBox-Linux系统安装增强功能
    PhantomJS快速入门
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13723127.html
Copyright © 2020-2023  润新知