欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode第17题 电话号码的字母组合

程序员文章站 2022-06-05 17:13:49
...

问题描述

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

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

LeetCode第17题 电话号码的字母组合

示例:

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

说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number

解题思路

  这题就是找出所有组合方式;只是由于给出的字符串可能很长,所以不方便使用多重循环。可以使用递归的方式进行深搜回溯,在深搜之前先建立数字与字符串的对应表,可以使用hashmap也可以使用数组;使用数组更快。深搜时找出数字对应的字符串进行尝试即可。

代码实现:

import java.util.ArrayList;
import java.util.List;

public class text1 {
	
	ArrayList<String> list = new ArrayList<String>();
	String[] map = {" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
	
    public List<String> letterCombinations(String digits) {
    	if(digits==null || digits.length()==0) {
    		return list;
    	}
    	dfs(digits, "", 0);
		return list;
    }
    
	private void dfs(String digits, String letter, int index) {
		if(index==digits.length()) {  //递归出口
			list.add(letter);
			return ;
		}
		char c = digits.charAt(index);
		int pos = c - '0';  //下标
		String str = map[pos];
		for(int i=0; i<str.length(); i++) {
			dfs(digits, letter+str.charAt(i), index+1);
		}
	}
}

提交结果:
LeetCode第17题 电话号码的字母组合

相关标签: LeetCode刷题集合