zoukankan      html  css  js  c++  java
  • LeetCode17. *的字母组合

    ☆☆☆思路:递归。本题是典型的树形问题  

         使用StringBuilder要比拼接String效率高,但注意需要回溯操作。

    class Solution {
        List<String> res; // 作为类的一个成员变量
        String[] map = new String[]{
                "",
                "",
                "abc",
                "def",
                "ghi",
                "jkl",
                "mno",
                "pqrs",
                "tuv",
                "wxyz"
        };
        public List<String> letterCombinations(String digits) {
            res = new ArrayList<>();
            if (digits == null || digits.length() == 0) return res;
    //        dfs(digits, 0, "");
            dfs1(digits, 0, new StringBuilder()); // 使用StringBuilder,需要回溯操作
            return res;
        }
        // s中保存了此时从digits[0...index-1]翻译得到的一个字母字符串
        // 寻找和digits[index]匹配的字母,获得digits[0...index]翻译得到的解
        private void dfs(String digits, int index, String s) {
            if (index == digits.length()) {
                res.add(s);
                return;
            }
            char digit = digits.charAt(index);
            String letters = map[digit - '0'];
            for (int i = 0; i < letters.length(); i++) {
                dfs(digits, index + 1, s + letters.charAt(i));
            }
        }
    
        /**
         *  因为StringBuilder传入的都是同一个对象,所以在递归完成之后必须撤回上一次的操作,
         *  需要删除上一次添加的字符。
         *  而String每次改变之后传入的都是不同的对象。故无需撤销操作。
         */
        private void dfs1(String digits, int index, StringBuilder sb) {
            if (index == digits.length()) {
                res.add(sb.toString());
                return;
            }
            char digit = digits.charAt(index);
            String letters = map[digit - '0'];
            for (int i = 0; i < letters.length(); i++) {
                sb.append(letters.charAt(i));
                dfs1(digits, index + 1, sb);
                sb.deleteCharAt(sb.length() - 1); // 回溯
            }
        }
    }
  • 相关阅读:
    测试管理_测试工作量估算
    Mycat原理、应用场景
    linux负载均衡总结性说明(四层负载/七层负载)
    Spring自动装配Bean的五种方式
    计算机组成原理总结
    MyBatis总结
    系统吞吐量(TPS)、用户并发量、性能测试概念和公式
    初探Nginx服务器的整体架构
    mybatis架构理解
    linux环境上运行.net core 初探
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14193402.html
Copyright © 2011-2022 走看看