• 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)
            }
        }
    }
  • 相关阅读:
    python flask 环境安装
    pymongo的说明,挺详细的
    Mysql加锁过程详解
    MySQL Group Replication 介绍
    Linux 下方便的ssh非交互工具sshpass的安装与使用
    我要拿Offer之AQS条件队列及中断机制
    ThreadLocal解析
    AQS源码分析总结
    动手实现一个同步器(AQS)
    java线程池解析
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13723127.html
Copyright © 2020-2023  润新知