一. 问题描述
给定一个仅包含数字 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); } } } }