import java.util.*;

/**
* Source : https://oj.leetcode.com/problems/letter-combinations-of-a-phone-number/
*
* Created by lverpeng on 2017/7/10.
*
* Given a digit string, return all possible letter combinations that the number could represent.
*
* A mapping of digit to letters (just like on the telephone buttons) is given below.
*
* Input:Digit string "23"
* Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
*
* Note:
* Although the above answer is in lexicographical order, your answer could be in any order you want.
* */
public class LetterCombinationOfaPhoneNumber { private Map<Character, String[]> map = new HashMap<Character, String[]>(){{
put('0', new String[]{"", "", "", ""});
put('1', new String[]{"", "", "", ""});
put('2', new String[]{"a", "b", "c", ""});
put('3', new String[]{"d", "e", "f", ""});
put('4', new String[]{"g", "h", "i", ""});
put('5', new String[]{"j", "k", "l", ""});
put('6', new String[]{"m", "n", "o", ""});
put('7', new String[]{"p", "q", "r", "s"});
put('8', new String[]{"t", "u", "v", ""});
put('9', new String[]{"w", "x", "y", "z"});
}}; /**
* 广度优先
* 先计算出
*
* @param numStr
* @return
*/
public String[] letterCombination (String numStr) {
List<String> result = new ArrayList<String>(); for (int i = 0; i < numStr.length(); i++) {
List<String> currentStrArr = new ArrayList<String>();
if (result.size() == 0) {
for (int j = 0; j < 4 && !"".equals(map.get(numStr.charAt(i))[j]); j++) {
currentStrArr.add(map.get(numStr.charAt(i))[j] + "");
}
} else {
for (String str : result) {
for (int j = 0; j < 4 && !"".equals(map.get(numStr.charAt(i))[j]); j++) {
currentStrArr.add(str + map.get(numStr.charAt(i))[j]);
}
}
}
result = currentStrArr;
} return result.toArray(new String[result.size()]);
} /**
* 深度优先
*
* @param numStr
* @param index
* @param result
* @param str
* @return
*/
public String letterConbinationByDFS (String numStr, int index, List<String> result, String str) {
if (index >= numStr.length()) {
return str;
}
char ch = numStr.charAt(index); for (int j = 0; j < 4; j++) {
if (map.get(ch)[j].equals("")) {
return "";
}
str += map.get(ch)[j] + ""; str = letterConbinationByDFS(numStr, index + 1, result, str);
if (!str.equals("")) {
result.add(str);
str = str.substring(0, str.length() - 1);
}
}
return str;
} public static void main(String[] args) {
LetterCombinationOfaPhoneNumber letterCombinationOfaPhoneNumber = new LetterCombinationOfaPhoneNumber();
System.out.println(Arrays.toString(letterCombinationOfaPhoneNumber.letterCombination("23")));
List<String> list = new ArrayList<String>();
letterCombinationOfaPhoneNumber.letterConbinationByDFS("23", 0 , list, "");
System.out.println(Arrays.toString(list.toArray(new String[list.size()])));
}
}

最新文章

  1. 动态令牌-(OTP,HOTP,TOTP)-基本原理
  2. 移动开发tip
  3. [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程
  4. Android Studio如何引用外部Library工程
  5. Swift实战-QQ在线音乐(AppleWatch版)
  6. 【转】jquery两稳定版本比较~~
  7. Asp.Net Mvc后台数据验证自测小Demo
  8. B - 瑶瑶带你玩激光坦克
  9. Android Doze模式启用和恢复
  10. 微信小程序添加、删除class’
  11. 用Node.JS+MongoDB搭建个人博客(model目录)(三)
  12. WPF基础篇之空间布局
  13. java 反射机制 观点
  14. java之web开发过滤器
  15. LoadRunner(二)——性能测试过程概述
  16. Java 集合Collection与List的详解
  17. object-c中疑问
  18. 2019swpuj2ee作业一:C/S,B/S的应用的区别
  19. BAT-增加JAVA环境变量(WIN764位)
  20. linux几种查看日志的方法

热门文章

  1. kubernetes promethues预警、报警
  2. eclipse中将一个项目作为library导入另一个项目中
  3. 登录服务器失败 IP 统计和处理方法
  4. jQuery的事件,动画效果等
  5. Alpha冲刺 - (7/10)
  6. Delphi控件cxGrid 如何动态创建列?
  7. koa中返回404并且刷新后才正常的解决方案
  8. 《JavaScript面向对象编程指南》读书笔记①
  9. 腾讯Alloy团队代码规范
  10. Spring,为内部方法新起一个事务,此处应有坑。