zoukankan      html  css  js  c++  java
  • [leetcode]Letter Combinations of a Phone Number

    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.

     算法思路:

    1.  很明显,这道题是组合问题combination,可以使用迭代来完成

    2.  DFS。我的旧博客用的是combination的方法,不过当时心情不好,写的比较乱,这次我用的dfs,代码更简洁

     1 public class Solution {
     2 char[][] numberBoard = {{},{},{'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'}};
     3     public List<String> letterCombinations(String digits) {
     4         List<String> result = new ArrayList<String>();
     5         dfs(result,new StringBuilder(),digits);
     6         return result;
     7     }
     8     
     9     private void dfs(List<String> result,StringBuilder sb,String suffix){
    10         if(suffix.length() == 0){
    11             result.add(sb.toString());
    12             return;
    13         }
    14         int index = suffix.charAt(0) - '0';
    15         for(int i = 0; i < numberBoard[index].length; i++){
    16             dfs(result, sb.append(numberBoard[index][i]), suffix.substring(1));
    17             sb.deleteCharAt(sb.length() - 1);
    18         }
    19     }
    20 }

     第二遍:

    对上一遍代码进行了一点点修复,如果digits中包含0或者1时,应该做出相应处理。

    代码如下:

     1 public class Solution {
     2     List<String> res = new ArrayList<String>();
     3     public List<String> letterCombinations(String digits) {
     4         dfs(new StringBuilder(),0,digits);
     5         return res;
     6     }
     7     private void dfs(StringBuilder sb,int k,String s){
     8         if(k >= s.length()){
     9             res.add(sb.toString());
    10             return;
    11         }
    12         char[][] board = {{},{},{'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'}};
    13         int n = s.charAt(k) - '0';
    14         if(n < 2) dfs(sb,k,s);//跳过,也可以抛出异常,总之需要对非法数字进行处理
    15         for(int i = 0; i < board[n].length; i++){
    16             sb.append(board[n][i]);
    17             dfs(sb,k + 1,s);
    18             sb.deleteCharAt(sb.length() - 1);
    19         }
    20     }
    21 }
  • 相关阅读:
    兼容ie6的mvvm框架--san
    Parsing error: The keyword 'export' is reserved && error Parsing error: Unexpected token <
    Call to undefined function openssl_decrypt()
    css 陌生属性
    获取url
    relative 和 absolute
    SSL certificate problem: unable to get local issuer certificate 的解决方法
    使用wamp扩展php时出现服务未启动的解决方法
    php判断是不是移动设备
    js:不是空字符串的空字符串引起的bug
  • 原文地址:https://www.cnblogs.com/huntfor/p/3847484.html
Copyright © 2011-2022 走看看