做企业网站需要的人,seo研究所,西安学校网站建设公司,wordpress名片问题:
给定一个仅包含数字 2-9 的字符串#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下#xff08;与电话按键相同#xff09;。注意 1 不对应任何字母。
示例 1#xff1a;
输入#xff1a;digits 23
输…问题:
给定一个仅包含数字 2-9 的字符串返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。
示例 1
输入digits 23
输出[ad,ae,af,bd,be,bf,cd,ce,cf]
示例 2
输入digits
输出[]
示例 3
输入digits 2
输出[a,b,c] 提示
0 digits.length 4
digits[i] 是范围 [2, 9] 的一个数字。 解答思路
1. 建立一个数字到字母的映射表使用HashMap来存储。
2. 使用回溯法递归地生成所有的字母组合。
3. 定义一个helper方法传入当前的组合字符串prefix和剩余的数字字符串digits递归生成字母组合并将结果存入结果列表。
4. 在helper方法中首先判断如果digits为空说明已经把所有数字都处理完了将当前的组合字符串加入结果列表并返回。
5. 如果digits不为空取出digits的第一个字符找到对应的字母列表遍历字母列表对每个字母进行递归调用helper方法在组合字符串后面加上当前的字母传入新的剩余数字字符串digits.substring(1)。
6. 在主方法中先判断给定的数字字符串是否为空如果为空直接返回空的列表。
7. 否则调用helper方法传入空的组合字符串和给定的数字字符串并返回结果列表。
代码如下
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Solution {public ListString letterCombinations(String digits) {ListString result new ArrayList();if(digits null || digits.length() 0){return result;}MapCharacter, String map new HashMap();map.put(2, abc);map.put(3, def);map.put(4, ghi);map.put(5, jkl);map.put(6, mno);map.put(7, pqrs);map.put(8, tuv);map.put(9, wxyz);helper(result, , digits);return result;}private void helper(ListString result, String prefix, String digits){if(digits.length() 0){result.add(prefix);return;}char c digits.charAt(0);String letters map.get(c);for(int i 0; i letters.length(); i){helper(result, prefix letters.charAt(i), digits.substring(1));}}}
(文章为作者在学习java过程中的一些个人体会总结和借鉴如有不当、错误的地方请各位大佬批评指正定当努力改正如有侵权请联系作者删帖。)