电话号码的字母组合

2021-02-22  本文已影响0人  twilight_mao

题目描述

链接
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

image.png

思路

  1. 回溯法
class Solution {
    char[][] arr = {{},{},{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},
    {'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};
    List<String> result = new ArrayList();
    StringBuilder way = new StringBuilder();
    public List<String> letterCombinations(String digits) {
        if(digits.length() == 0){
            return result;
        }else if(digits.length() == 1){
            int i = digits.charAt(0)-'0';
            for(int j = 0;j<arr[i].length;j++){
                result.add(arr[i][j]+"");
            }
        }else{
            fun(digits,0);
        }
        return result;
    }
    public void fun(String digits,int currentNum){
        if(currentNum >= digits.length()){
            if(currentNum == digits.length()){
                result.add(way.toString());
            }
            return;
        }
        int i = digits.charAt(currentNum)-'0';
        for(int j = 0;j<arr[i].length;j++){
            way.append(arr[i][j]+"");
            fun(digits,currentNum+1);
            way.deleteCharAt(way.length()-1);
        }
    }
}

遇到的问题

  1. 二维数组的初始化
int [ ][ ]  arr=new  int [5][3]; // 也可以理解为“5行3例”
//静态初始化可用于不规则二维数组的初始化
int [][] arr=new int[][]{{4,5,6,8},{2,3},{1,6,9}};
  1. java 中 String、StringBuilder、StringBuffer
    2.1 区别

2.2 String 的方法总结

char charAt(int index);
int length();
char[] toCharArray();

2.3 StringBuilder的方法总结

StringBuilder s=new StringBuilder();
s.deleteCharAt(s.length()-1);
上一篇 下一篇

猜你喜欢

热点阅读