• Letter Combinations of a Phone Number


    Given a digit string, return all possible letter combinations that the number could represent.

    A mapping of digit to letters (just like on the telephone buttons) is given below.

    Input:Digit string "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    

    Note:
    Although the above answer is in lexicographical order, your answer could be in any order you want.

    这题好无聊, 纯粹的重复性劳动,算法很简单就是DFS。

      1 public class Solution {
      2     ArrayList<String> result = null;
      3     public ArrayList<String> letterCombinations(String digits) {
      4         // Note: The Solution object is instantiated only once and is reused by each test case.
      5         result = new ArrayList<String>();
      6         if(digits == null) return result;
      7         if(digits.length() == 0){
      8             result.add("");
      9             return result;
     10         }
     11         getDigit(digits, 0, new StringBuffer());
     12         return result;
     13     }
     14     public void getDigit(String s,int pos,StringBuffer sb){
     15         if(pos == s.length()){
     16             result.add(sb.toString());
     17             return;
     18         }
     19         char c = s.charAt(pos);
     20         if(c == '2'){
     21             sb.append('a');
     22             getDigit(s,pos + 1, new StringBuffer(sb));
     23             sb.deleteCharAt(sb.length() - 1);
     24             
     25             sb.append('b');
     26             getDigit(s,pos + 1, new StringBuffer(sb));
     27             sb.deleteCharAt(sb.length() - 1);
     28             
     29             sb.append('c');
     30             getDigit(s,pos + 1, new StringBuffer(sb));
     31             sb.deleteCharAt(sb.length() - 1);
     32         }else if(c == '3'){
     33             sb.append('d');
     34             getDigit(s,pos + 1, new StringBuffer(sb));
     35             sb.deleteCharAt(sb.length() - 1);
     36             
     37             sb.append('e');
     38             getDigit(s,pos + 1, new StringBuffer(sb));
     39             sb.deleteCharAt(sb.length() - 1);
     40             
     41             sb.append('f');
     42             getDigit(s,pos + 1, new StringBuffer(sb));
     43             sb.deleteCharAt(sb.length() - 1);
     44         }else if(c == '4'){
     45             sb.append('g');
     46             getDigit(s,pos + 1, new StringBuffer(sb));
     47             sb.deleteCharAt(sb.length() - 1);
     48             
     49             sb.append('h');
     50             getDigit(s,pos + 1, new StringBuffer(sb));
     51             sb.deleteCharAt(sb.length() - 1);
     52             
     53             sb.append('i');
     54             getDigit(s,pos + 1, new StringBuffer(sb));
     55             sb.deleteCharAt(sb.length() - 1);
     56         }else if(c == '5'){
     57             sb.append('j');
     58             getDigit(s,pos + 1, new StringBuffer(sb));
     59             sb.deleteCharAt(sb.length() - 1);
     60             
     61             sb.append('k');
     62             getDigit(s,pos + 1, new StringBuffer(sb));
     63             sb.deleteCharAt(sb.length() - 1);
     64             
     65             sb.append('l');
     66             getDigit(s,pos + 1, new StringBuffer(sb));
     67             sb.deleteCharAt(sb.length() - 1);
     68         }else if(c == '6'){
     69             sb.append('m');
     70             getDigit(s,pos + 1, new StringBuffer(sb));
     71             sb.deleteCharAt(sb.length() - 1);
     72             
     73             sb.append('n');
     74             getDigit(s,pos + 1, new StringBuffer(sb));
     75             sb.deleteCharAt(sb.length() - 1);
     76             
     77             sb.append('o');
     78             getDigit(s,pos + 1, new StringBuffer(sb));
     79             sb.deleteCharAt(sb.length() - 1);
     80         }else if(c == '7'){
     81             sb.append('p');
     82             getDigit(s,pos + 1, new StringBuffer(sb));
     83             sb.deleteCharAt(sb.length() - 1);
     84             
     85             sb.append('q');
     86             getDigit(s,pos + 1, new StringBuffer(sb));
     87             sb.deleteCharAt(sb.length() - 1);
     88             
     89             sb.append('r');
     90             getDigit(s,pos + 1, new StringBuffer(sb));
     91             sb.deleteCharAt(sb.length() - 1);
     92             
     93             sb.append('s');
     94             getDigit(s,pos + 1, new StringBuffer(sb));
     95             sb.deleteCharAt(sb.length() - 1);
     96         }else if(c == '8'){
     97             sb.append('t');
     98             getDigit(s,pos + 1, new StringBuffer(sb));
     99             sb.deleteCharAt(sb.length() - 1);
    100             
    101             sb.append('u');
    102             getDigit(s,pos + 1, new StringBuffer(sb));
    103             sb.deleteCharAt(sb.length() - 1);
    104             
    105             sb.append('v');
    106             getDigit(s,pos + 1, new StringBuffer(sb));
    107             sb.deleteCharAt(sb.length() - 1);
    108         }else if(c == '9'){
    109             sb.append('w');
    110             getDigit(s,pos + 1, new StringBuffer(sb));
    111             sb.deleteCharAt(sb.length() - 1);
    112             
    113             sb.append('x');
    114             getDigit(s,pos + 1, new StringBuffer(sb));
    115             sb.deleteCharAt(sb.length() - 1);
    116 
    117             sb.append('y');
    118             getDigit(s,pos + 1, new StringBuffer(sb));
    119             sb.deleteCharAt(sb.length() - 1);
    120             
    121             sb.append('z');
    122             getDigit(s,pos + 1, new StringBuffer(sb));
    123             sb.deleteCharAt(sb.length() - 1);
    124         }else if(c == '0'){
    125             sb.append(' ');
    126             getDigit(s,pos + 1, new StringBuffer(sb));
    127             sb.deleteCharAt(sb.length() - 1);
    128         }else{
    129             return;
    130         }
    131     }
    132 }

     别人的解法:

     1 public class Solution {
     2     public ArrayList<String> letterCombinations(String digits) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         ArrayList<String> res = new ArrayList<String> ();
     6         res.add("");
     7         if(digits==null) return res;
     8         String[] table = digitToString();
     9         for(int i=0;i<digits.length();i++){
    10             ArrayList<String> cur = new ArrayList<String>();
    11             char c = digits.charAt(i);
    12             if(c>='2' && c<='9'){
    13                 for(String temp:res){
    14                     for(int j=0;j<table[c-'2'].length();j++){
    15                         cur.add(temp + table[c-'2'].charAt(j));
    16                     }
    17                 }
    18             }
    19             res= new ArrayList<String>(cur);
    20         }
    21         return res;    
    22     }
    23     public String[] digitToString(){
    24       String[] res = new String[8];
    25       char start = 'a';
    26       
    27       for(int i=0;i<8;i++){
    28         int count = (i==5||i==7)?4:3;
    29         StringBuilder temp = new StringBuilder("");
    30         for(int j=0;j<count;j++){
    31             temp.append((char)(start+j));
    32         }
    33         start=(char)(start+count);
    34         res[i] = temp.toString(); 
    35       }
    36       return res;
    37     }
    38 }

     第二遍:

     1 public class Solution {
     2     ArrayList<String> result = null;
     3     public ArrayList<String> letterCombinations(String digits) {
     4         // Note: The Solution object is instantiated only once and is reused by each test case.
     5          String[] c={   "",
     6                         "",
     7                         "abc",
     8                         "def",
     9                         "ghi",
    10                         "jkl",
    11                         "mno",
    12                         "pqrs",
    13                         "tuv",
    14                         "wxyz"  };
    15         result = new ArrayList<String>();
    16         search( digits, 0, new StringBuffer(), c);
    17         return result;
    18     }
    19     public void search(String s, int pos, StringBuffer sb,String[] c){
    20         if(pos == s.length()){
    21             result.add(sb.toString());
    22             return;
    23         }
    24         int num = s.charAt(pos) - '0';
    25         for(int i = 0; i < c[num].length(); i ++){
    26             sb.append(c[num].charAt(i));
    27             search(s, pos + 1, new StringBuffer(sb), c);
    28             sb.deleteCharAt(sb.length() - 1);
    29         }
    30     }
    31 }
  • 相关阅读:
    bzoj 3040: 最短路(road)
    bzoj 2049: [Sdoi2008]Cave 洞穴勘测
    poj 2505 A multiplication game
    hdu 1729 Stone Game
    经典博弈模型
    hdu 1848 Fibonacci again and again(SG函数)
    hdu 2147 kiki's game(巴什博弈)
    hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
    hdu 4388 Stone Game II
    poj 2234 Matches Game
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3371440.html
Copyright © 2020-2023  润新知