玩转算法 第六天 递归回溯问题

第六天 递归回溯问题

    • 17. 电话号码的字母组合
    • 131. 分割回文串
    • 93. 复原IP地址
    • 46. 全排列
    • 47. 全排列 II
    • 77. 组合
    • 39. 组合总和
    • 40. 组合总和 II
    • 216. 组合总和 III
    • 78. 子集
    • 90. 子集 II
    • 401. 二进制手表
    • 79. 单词搜索
    • 200. 岛屿数量
    • 130. 被围绕的区域
    • 417. 太平洋大西洋水流问题
    • 51. N 皇后
    • 52. N皇后 II

17. 电话号码的字母组合

玩转算法 第六天 递归回溯问题_第1张图片

class Solution {
   
//一个映射表,第二个位置是"abc“,第三个位置是"def"。。。
      private String letterMap[] = {
   
            " ",    //0
            "",     //1
            "abc",  //2
            "def",  //3
            "ghi",  //4
            "jkl",  //5
            "mno",  //6
            "pqrs", //7
            "tuv",  //8
            "wxyz"  //9
    };

    private ArrayList<String> res= new ArrayList<String>();
    public List<String> letterCombinations(String digits) {
   
       //注意边界条件
        if(digits.equals(""))
            return res;
        findCombination(digits, 0, "");
        return res;
    }

    private void findCombination(String digits, int index, String s){
   
         //如果是最后一个字符,直接返回
        if(index == digits.length()){
   
            res.add(s);
            return;
        }
        
         //map_string的下表是从0开始一直到9, c-'0'就可以取到相对的数组下标位置
		//比如c=2时候,2-'0',获取下标为2,letter_map[2]就是"abc"
        Character c = digits.charAt(index);
        String letters = letterMap[c - '0'];
    //遍历字符串,比如第一次得到的是2,页就是遍历"abc"
        for(int i = 0 ; i < letters.length() ; i ++){
   
        //调用下一层递归
     findCombination(digits, index+1, s + letters

你可能感兴趣的:(#,Leetcode)