zoukankan      html  css  js  c++  java
  • 17. *的字母组合

      题目地址:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

      代码地址:https://github.com/javartisan/edx-ds/blob/master/src/main/java/com/javartisan/leetcode/Solution17.java 

      回溯法:就是逐个情况进行问题规模缩小之后并逐渐递归解决,当达到递归基之后返回到当初进行的递归调用点继续处理其他情况(每一个情况处理完成之后需要进行状态的重置)。

     1 class Solution {
     2     
     3 
     4     private static final char [][]mtx={
     5         {'a','b','c'},//2
     6         {'d','e','f'},//3
     7         {'g','h','i'},//4
     8         {'j','k','l'},
     9         {'m','n','o'},
    10         {'p','q','r','s'},
    11         {'t','u','v'},
    12         {'w','x','y','z'}//9
    13     };
    14     
    15     public List<String> letterCombinations(String digits) {
    16         List<String> ans = new ArrayList<>();
    17         if(digits==null||digits.length()==0){
    18             return ans;
    19         }
    20         dfs(ans, new StringBuilder(), digits, 0);
    21         return ans;
    22     }
    23 
    24     
    25     
    26     public void dfs(List<String> ans,StringBuilder an,String d,int index){
    27         
    28         if(index==d.length()){
    29             ans.add(an.toString());
    30             return;
    31         }
    32         // ‘1’转为1是减去48的,但是对于键盘映射二位数组使用了index-2缩小数组空间,因此减去50
    33         int num = d.charAt(index)-50;
    34         // 单独处理第一个是为了StringBuilder长度加1,之后set即可
    35         char[] letters = mtx[num];
    36         an.append(letters[0]);
    37         dfs(ans,an,d,index+1);
    38         
    39         for(int i=1,size=letters.length;i<size;i++){
    40             an.setCharAt(an.length()-1,letters[i]);
    41             dfs(ans,an,d,index+1);
    42         }
    43         //删除本次的计算状态,还原到上一次的状态继续计算其他可能情况
    44         an.delete(an.length()-1,an.length());
    45     }
    46     
    47 }

      

  • 相关阅读:
    愚人节的礼物
    Image Transformation
    Rails
    Google Map
    Code Formatter
    ACboy needs your help again!
    Geek's Collection(幂运算)
    Train Problem I
    Beautiful Meadow
    Card Trick(模拟)
  • 原文地址:https://www.cnblogs.com/leodaxin/p/11258667.html
Copyright © 2011-2022 走看看