import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param digits string字符串
     * @return string字符串一维数组
     */
    public String[] letterCombinations (String digits) {
        String [] str = {"xxx", "xxxx", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        if (digits.equals("")) {
            return null;
        }
        ArrayList<String> list = new ArrayList<>();
        if (digits.length() >= 2) {
            String substring = digits.substring(0, 2);
            char c = substring.charAt(0);
            char c1 = substring.charAt(1);
            int n = Integer.parseInt(c - 48 + "");
            int m = Integer.parseInt(c1 - 48 + "");
            String s = str[n];
            String s1 = str[m];
            for (int i = 0; i < s.length(); i++) {

                for (int j = 0; j < s1.length(); j++) {
                    StringBuilder stringBuilder = new StringBuilder(s.charAt(i) + "");
                    stringBuilder.append(s1.charAt(j));
                    list.add(stringBuilder.toString());
                }
            }
            if (digits.length() != 3) {
                return list.toArray(new String[0]);
            } else {
                char c2 = digits.charAt(2);
                int m1 = Integer.parseInt(c2 - 48 + "");
                String s2 = str[m1];
                int size = list.size();
                ArrayList<String> list1 = new ArrayList<>();
                for (int i = 0; i < size; i++) {
                    String s3 = list.get(i);
                    for (int k = 0; k < s2.length(); k++) {
                        StringBuilder stringBuilder = new StringBuilder(s3);
                        stringBuilder.append(s2.charAt(k));
                        list1.add(stringBuilder.toString());
                    }

                }
                return list1.toArray(new String[0]);
            }

        }
      if(digits.length()==1){
            int result = Integer.parseInt(digits);
            String s = str[result];
           return s.split("");
        }
        return list.toArray(new String[0]);
    }
}

本题知识点分析:

1.哈希表存取

2.集合遍历和存取

3.集合如何转字符串数组

4.字符串转数字

5.字符如何从Ascii码转化成数字

本题解题思路分析:

1.如果形参长度为0,返回空数组

2.如果形参长度为1,返回的给定字符串数组[下标]的各个字符,转字符串数组即可

3.如果形参长度>=2分类讨论

4.长度为2,就取出这两个字符串,然后双层for遍历添加到集合

5.长度为3,先做完长度为2的,然后和第三个字符串双层for同理即可

6.最后集合转字符串数组,list.toArray(new String[])

本题使用编程语言: Java