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); // 回溯
            }
        }
    }
  • 相关阅读:
    elasticHD
    python3--socketIO_client 摸索怕坑指南
    治疗重新造轮子症系列——递归查询json数据中所有的key值
    REST FRAME WORK--认证 权限 Xadmin
    REST FRAME WORK--视图基类 视图集
    REST FRAME WOEK 请求与响应&视图
    REST FRAME WORK--1
    VUE--axios--对象提供的属性功能
    VUE--组件化开发--VUE-CLI
    Vue中发送ajax请求——axios使用详解
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14193402.html
Copyright © 2011-2022 走看看