17.Letter Combinations of a Phone Number

17.Letter Combinations of a Phone Number_第1张图片
题目

看了眼题,有点递归的想法,然后写不出来。。。
之后看了答案还想了一会儿才明白。
时间复杂度 O(n!),空间复杂度 O(n)

public List letterCombinations(String digits) {
    List list = new ArrayList<>();
    if (digits.length() == 0) {
      return list;
    }

    String[] keyboard = new String[]{" ", "", "abc", "def", "ghi",
        "jkl", "mno", "pqrs", "tuv", "wxyz"};
    letterCombinationsRe(keyboard, digits, list, "");
    return list;
  }

  public void letterCombinationsRe(String[] keyboard, String digits, List list, String s) {
    if (s.length() == digits.length()) {
      // 找到了,结束本次循环
      list.add(s);
      return;
    }
    // 否则打开一个新地图,增加一个新数字,并且开始循环
    String newNumberString = keyboard[digits.charAt(s.length()) - '0'];
    for (int i = 0; i < newNumberString.length(); i++) {
      // 开始递归这个新数字里对应的全部字母
      letterCombinationsRe(keyboard, digits, list, s + newNumberString.charAt(i));
    }
  }

你可能感兴趣的:(17.Letter Combinations of a Phone Number)