Leetcode: LetterCombinationsofaPhoneNumber 根据手机按键,给出所有可能的字符串

package leetcode151withexplain;

import java.util.ArrayList;

/**
 * 本题题意:给出一个数字字符串,然后根据手机上面的按键,给出所有可以拼凑出来的字符串。
 *
 * Input:Digit string "23"  Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
 *
 * 解题思路:通过递归调用,边界条件就是一个字符的时候,那么返回其对应的所有字符就可以了。获取本层的所有字符,然后获取下一轮中的所有字符,然后两个两个拼凑出最终的结果
 *
 */
public class LetterCombinationsofaPhoneNumber133 {
 
 
    public ArrayList<String> letterCombinations(String digits) {
         int digitSize = digits.length();
         //如果字符串长度为0  特殊处理
         if(digitSize == 0){
             ArrayList<String> answer = new ArrayList<String>();
             answer.add("");
             return answer;
         }
        
         return getCombinationLetters(digits,digitSize-1);
     }
    
     /**
      * 获取结果
      * @param digits 给出的数字字符串
      * @param currentPosition 当前考虑的位置
      * @return
      */
     public ArrayList<String> getCombinationLetters(String digits,int currentPosition){
        
      //存储结果用
         ArrayList<String> results = new ArrayList<String>();
        
         //存储临时结果
         ArrayList<String> tempResults = new ArrayList<String>();
        
         //获取当前字符
         String currentDigit = digits.substring(currentPosition,currentPosition+1);
         //获取字符对应的字符
         tempResults = getStringsByNum(currentDigit);
         //如果当前位置是第一个字符,那么答案就是结果集  也属于边界条件了
         if(currentPosition == 0){
             results = tempResults;
             return results;
         }
        
         //获取下一轮的所有结果
         ArrayList<String> nextResults = getCombinationLetters(digits,currentPosition-1);
        
         //拼凑两次的结果   记录到结果集中
         for(String tempS : tempResults){
             for(String nextS : nextResults){
                 results.add(nextS+tempS);  
             }
         }
        
         return results;
     }
    
     //用于返回每一个数字对应的String
     public ArrayList<String> getStringsByNum(String number){
         ArrayList<String> results = new ArrayList<String>();
        
          if(number.equals("2")){
             results.add("a");
             results.add("b");
             results.add("c");
         }
        
         if(number.equals("3")){
             results.add("d");
             results.add("e");
             results.add("f");
         }
        
         if(number.equals("4")){
             results.add("g");
             results.add("h");
             results.add("i");
         }
        
         if(number.equals("5")){
             results.add("j");
             results.add("k");
             results.add("l");
         }
        
         if(number.equals("6")){
             results.add("m");
             results.add("n");
             results.add("o");
         }
        
         if(number.equals("7")){
             results.add("p");
             results.add("q");
             results.add("r");
             results.add("s");
         }
        
         if(number.equals("8")){
             results.add("t");
             results.add("u");
             results.add("v");
         }
        
         if(number.equals("9")){
            
             results.add("w");
             results.add("x");
             results.add("y");
             results.add("z");
         }
     
         return results;
     }
    
     public static void main(String[] args){
      int a = 97 + 0;
      System.out.println(String.valueOf((char)(a)));
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值