zoukankan      html  css  js  c++  java
  • Letter Combinations of a Phone Number

    Letter Combinations of a Phone Number 

    问题:

    iven a digit string, 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.

    思路:

      dfs+回溯

    我的代码:

    public class Solution {
        public List<String> letterCombinations(String digits) {
            List<String> list = new ArrayList<String>();
            if(digits == null || digits.length() == 0)  return list;
            helper("", digits, list);
            return list;
        }
        public void helper(String s, String digits, List<String> list)
        {
            if(digits.length() == 0)
            {
                list.add(s);
                return;
            }
            char digit = digits.charAt(0);
            String letters = getLetters(digit);
            if(letters.equals(""))
            {
                helper(s, digits.substring(1), list);
            }
            for(int i = 0; i <letters.length(); i++)
            {
                helper(s+letters.charAt(i), digits.substring(1), list);
            }
        }
        public String getLetters(char c)
        {
            switch(c)
            {
                case '2': return "abc";
                case '3': return "dfe";
                case '4': return "ghi";
                case '5': return "jkl";
                case '6': return "mno";
                case '7': return "pqrs";
                case '8': return "tuv";
                case '9': return "wxyz";
                default : return "";
            }
        }
    }
    View Code

    他人代码:

    public class Solution {
        public ArrayList<String> letterCombinations(String digits) {
            ArrayList<String> result = new ArrayList<String>();
    
            if (digits == null) {
                return result;
            }
    
            Map<Character, char[]> map = new HashMap<Character, char[]>();
            map.put('0', new char[] {});
            map.put('1', new char[] {});
            map.put('2', new char[] { 'a', 'b', 'c' });
            map.put('3', new char[] { 'd', 'e', 'f' });
            map.put('4', new char[] { 'g', 'h', 'i' });
            map.put('5', new char[] { 'j', 'k', 'l' });
            map.put('6', new char[] { 'm', 'n', 'o' });
            map.put('7', new char[] { 'p', 'q', 'r', 's' });
            map.put('8', new char[] { 't', 'u', 'v'});
            map.put('9', new char[] { 'w', 'x', 'y', 'z' });
    
            StringBuilder sb = new StringBuilder();
            helper(map, digits, sb, result);
    
            return result;
        }
    
        private void helper(Map<Character, char[]> map, String digits, 
            StringBuilder sb, ArrayList<String> result) {
            if (sb.length() == digits.length()) {
                result.add(sb.toString());
                return;
            }
    
            for (char c : map.get(digits.charAt(sb.length()))) {
                sb.append(c);
                helper(map, digits, sb, result);
                sb.deleteCharAt(sb.length() - 1);
            }
        }
    }
    View Code

    学习之处:

    • string 自带回溯属性 这方面减少不少的问题 不断的新建s 消耗的空间还是挺多的。
    • 他人代码里面用的是StringBuffer相对而言,节约了空间。
  • 相关阅读:
    排序
    洛谷P1071 字符串
    编写ui自动化问题总结
    fastdfs跨服务器数据迁移
    JMeter随机上传附件
    抓包工具介绍
    idea2019.1版本永久版破解
    使用nodejs模拟http接口的返回
    配置RHEL&CentOS网络说明
    linux测试最最最最基本操作命令
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4339892.html
Copyright © 2011-2022 走看看