力扣LeetCode17、电话号码的字母组合,解题思路的来源

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

在这里插入图片描述

欧克欧克,说实话最近刷题很少了,再刷那个慕课网的Java就业班,
其实吧我刷那个班有点迟了,最好刚学完Java的大学生暑假寒假刷,我这毕业了有点迟咯。
不过意识到迟的时候也是最适合开始的时候。不是嘛?
这道题目,我拿到的时候吧。左思右想我觉得就是个很随意的穷举法,不过效率太低了。
在这边给大家列一下吧。就是如果输入的字符串不为空的话,我们从map中找到对应的字符。
然后挨个的和list中的元素增加就好啦

public class letter {	
	 public List<String> letterCombinations(String digits) {
		 if(digits.isEmpty())
			 return null;
		 Map<Integer,String> m=new HashMap<>();
		 m.put(2, "abc");
		 m.put(3, "def");
		 m.put(4, "ghi"); 
		 m.put(5, "jkl");
		 m.put(6, "mno");
		 m.put(7, "pqrs");
		 m.put(8, "tuv");
		 m.put(9, "wxyz"); 
		 int[] dig=new int[digits.length()];
		 for(int i=0;i<dig.length;i++){
			 dig[i]=new Integer(digits.substring(i, i+1));
		 }
		 List<String> s=new ArrayList<String>();
		 String s1=m.get(dig[0]);
		 for(String temp:s1.split(""))
		   s.add(temp);//初始化下list
		 for(int i=1;i<dig.length;i++){
			 s=fuck(s,m.get(dig[i]));//穷举法
		 }	 
		return s;
	 }
	private List<String> fuck(List<String> s, String string) {
		 List<String> s2=new ArrayList<String>();
		for(int i=0;i<s.size();i++){
			for(int k=0;k<string.length();k++){
				s2.add(s.get(i)+string.substring(k, k+1));//真正逻辑也不是很难吧
			}
		}
		return s2;
	}
	public static void main(String[] args) {
		letter l=new letter();
		List<String> list=l.letterCombinations("235");
		for(String ll:list){
			System.out.println(ll);
		}
	}
}

欧克欧克,为了学习,我们来看下别人的题解,想想他们的思路
他们的思路很清奇无暇,运用迭代的方式去操作
okok,就是想想每个数字是一个节点,他有三条或者4条分支,问从根节点到叶节点一共有多少路,并用list保存每条路的信息
代码如下

class Solution {
  	private ArrayList<String> res;
	 Map<Integer,String> m1=new HashMap<Integer, String>();
	 public List<String> letterCombinations(String digits) {
		 m1.put(2, "abc");
		 m1.put(3, "def");
		 m1.put(4, "ghi"); 
		 m1.put(5, "jkl");
		 m1.put(6, "mno");
		 m1.put(7, "pqrs");
		 m1.put(8, "tuv");
		 m1.put(9, "wxyz"); 
		 res=new ArrayList<String>();
		 if(digits.equals(""))
			 return res;
		 findCombination(digits,0,"");
		 return res;
	
	 }
	private void findCombination(String digits, int i, String str) {
		 if(i==digits.length()){
			 res.add(str);
			 return;
		 }
		 Character c=digits.charAt(i);
		 String letters=m1.get(c-'0');
		 for(int j=0;j<letters.length();j++){
			 findCombination(digits, i+1, str+letters.charAt(j));
		 }
}
}

最后宣传下我个人的微信公众号,微信搜索:可及的小屋,有志向整副业,娱乐的程序员们,欢迎您的到来。谢谢。
100G程序员资料,自取哦!!
可及的小屋

发布了48 篇原创文章 · 获赞 9 · 访问量 2405

猜你喜欢

转载自blog.csdn.net/jjy19971023/article/details/104465731