第17题:*的组合

一. 问题描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

输入:"23"

输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

二. 解题思路

本题思路:采用递归进行求解,非常简单,通过递归,只考虑到当前一次递归的所有解,当递归到最后时则可输出。

步骤一:构建递归函数(全局列表list,当前递归的数字位数number,当前的解digits,全局输入写temp,和对应字符串的数组)。

步骤二:当number==digits的值时,则说明当前解已经结束,将解添加到list中,否则的话循环当前number中的每一个字母,将其分别添加到temp中,并进行递归,直到所有解结束。

步骤三:输出list.

三. 执行结果

执行用时 :0 ms, 在所有 java 提交中击败了100.00%的用户

内存消耗 :35.7 MB, 在所有 java 提交中击败了76.58%的用户

四. Java代码

class Solution {
    public List<String> letterCombinations(String digits) {
          String []num= {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        List<String> list=new ArrayList<String>();
        if(digits.equals("")) {
            return list;
        }
        getlist(list,0,"",digits,num);
        return list;
    }
     public void getlist(List<String> list,int number,String temp,String digits,String[]num) {
        if(number==digits.length()) {
            list.add(temp);
            return;
        }else {
            int select=digits.charAt(number)-'0';
            for(int i=0;i<num[select-2].length();i++) {
                String alltemp=temp+num[select-2].charAt(i);
                getlist(list,number+1,alltemp,digits,num);
            }
        }
        
    }
}
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11981310.html