leetcode算法练习【17】电话号码的字母组合

所有题目源代码:Git地址

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。



示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

方案:暴力破解即可,算是用了点动态规划的思想,但是空间用多了,因为Java中的String是重新换空间new出来的

class Solution {
        public static HashMap<Integer, Character[]> hashMap;
        public Solution() {
            //初始化键盘字符
            hashMap = new HashMap<>( );
            hashMap.put(2, new Character[]{'a', 'b', 'c'});
            hashMap.put(3, new Character[]{'d', 'e', 'f'});
            hashMap.put(4, new Character[]{'g', 'h', 'i'});
            hashMap.put(5, new Character[]{'j', 'k', 'l'});
            hashMap.put(6, new Character[]{'m', 'n', 'o'});
            hashMap.put(7, new Character[]{'p', 'q', 'r', 's'});
            hashMap.put(8, new Character[]{'t', 'u', 'v'});
            hashMap.put(9, new Character[]{'w', 'x', 'y', 'z'});
        }
        public List<String> letterCombinations(String digits) {

            ArrayList<Character[]> ans = new ArrayList<>( );
            List<String> ret = new ArrayList<>( );
            //获得串
            int[] arr = new int[digits.length( )];
            for (int i = 0; i < digits.length( ); i++) {
                arr[i] = Integer.parseInt(digits.substring(i, i + 1));
            }
            for (int i = 0; i < arr.length; i++) {
                ans.add(hashMap.get(arr[i]));
            }

            //得到的字符数组
            for (int i = 0; i < arr.length; i++) {
                //[[],[],[],[],[],[],[]]
                ret = getString(ans.get(i), ret);
            }
            return ret;
        }

        public List<String> getString(Character[] arr, List<String> ret) {

            ArrayList<String> arrayList = new ArrayList<>( );

            if (ret.size( ) == 0) {
                for (int i = 0; i < arr.length; i++) {
                    arrayList.add(String.valueOf(arr[i]));
                }
            } else {
                //[2,3,4]
                for (int i = 0; i < arr.length; i++) {
                    for (int j = 0;j<ret.size();j++){
                        arrayList.add(ret.get(j)+String.valueOf(arr[i]));
                    }
                }
            }
            return arrayList;
        }
    }
复杂度计算
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

基础知识杂记

  • String.valueOf()多用于类型转换,类似的还有Integer.valueOf()等
发布了135 篇原创文章 · 获赞 187 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/105640613