【Java】letter combinations of phone number
2016-06-10 22:30
288 查看
/** * Created on 16/6/10. */ import java.util.InputMismatchException; import java.util.Scanner; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class letterCombinationsOfPhoneNumber { public static void main(String[] args) { Scanner in = new Scanner(System.in); String x = in.next(); System.out.println(letterCombinationsOfPhoneNumber(x)); System.out.println(letterCombinations(x)); } public static ArrayList<String> letterCombinations(String digits) { HashMap<Character, String> map = new HashMap<Character, String>(){{ put('2', "abc"); put('3', "def"); put('4', "ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz"); }}; ArrayList<String> ret = new ArrayList<>(); if (digits.equals("")) { return ret; } dfs(digits, 0, "", map, ret); return ret; } public static void dfs(String digits, int index, String path, HashMap<Character, String> map, List<String> ret) { if (digits.length() == path.length()) { ret.add(path); return; } for (int i = index; i < digits.length(); i++) { for (char c : map.get(digits.charAt(i)).toCharArray()) { dfs(digits, i + 1, path + c, map, ret); } } } public static ArrayList<String> letterCombinationsOfPhoneNumber(String digits) { HashMap<Integer, String> map = new HashMap<Integer, String>(); 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"); map.put(0, ""); ArrayList<String> result = new ArrayList<>(); if (digits == null || digits.length() == 0) { return result; } ArrayList<Character> tmp = new ArrayList<>(); getString(digits, tmp, result, map); return result; } public static void getString(String digits, ArrayList<Character> tmp, ArrayList<String> result, HashMap<Integer, String> map) { if (digits.length() == 0) { char[] arr = new char[tmp.size()]; for (int i = 0; i < tmp.size(); i++) { arr[i] = tmp.get(i); } result.add(String.valueOf(arr)); return; } Integer curr = Integer.valueOf(digits.substring(0, 1)); String letters = map.get(curr); for (int i = 0; i < letters.length(); i++) { tmp.add(letters.charAt(i)); getString(digits.substring(1), tmp, result, map); tmp.remove(tmp.size() - 1); } } }
相关文章推荐
- java.util.concurrent.atomic软件包介绍
- [置顶] springMVC返回数据到页面的几种方式
- 【Java学习-J.160601.0.20】一个验证码的servlet
- Eclipse中新建jsp文件访问页面时乱码问题
- springMVC 获取请求参数的几种方式
- Spring MVC配置DispatcherServlet的url-pattern
- eclipse java spark作业提交
- 使用GCC和Eclipse在Mac OS X下搭建nRF51822和nRF52832开发环境
- eclipse上安装hadoop后报错 Error:org.hadoop.security.AccessControlException:Permission
- JavaAPI之CopyOnWriteArrayList
- java关键字(书上汇总)
- JAVA学习前十天:小结、面向对象之”扑克牌“例子
- window系统安装java
- 复习(java):语法:基础
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
- 【Java学习-J.160601.0.20】Java 转发与重定向
- java多线程与内存可见性
- Java NIO 浅析I/O模型
- JavaSE复习_2 对象与类
- JavaSE复习_1 Java的基本格式和运算符