LeetCode Letter Combinations of a Phone Number
2015-10-29 12:00
357 查看
原题链接在这里:https://leetcode.com/problems/letter-combinations-of-a-phone-number/
与Combinations极其相似,也是DFS用递归来做。
递归的stop condition 是index 达到 digits 的长度。e.g. "23", 开始index = 0, 加了一个字符后, index = 1, 再加一个 index = 2, 此时index == digits.length() 应该把sb加到res中,然后return.
每次加一个字符,这个字符数组是通过"23"中的对应数字,如2来确定的. n就是这个数字,可以用n来从keyBoard中找到对应的string.
Time Complexity: O(k^n), k是数字代表keyBoard中string的长度, n是digits的长度. Space(k^n).
AC Java:
与Combinations极其相似,也是DFS用递归来做。
递归的stop condition 是index 达到 digits 的长度。e.g. "23", 开始index = 0, 加了一个字符后, index = 1, 再加一个 index = 2, 此时index == digits.length() 应该把sb加到res中,然后return.
每次加一个字符,这个字符数组是通过"23"中的对应数字,如2来确定的. n就是这个数字,可以用n来从keyBoard中找到对应的string.
Time Complexity: O(k^n), k是数字代表keyBoard中string的长度, n是digits的长度. Space(k^n).
AC Java:
public class Solution { public List<String> letterCombinations(String digits) { List<String> res = new ArrayList<String>(); if(digits == null || digits.length() == 0){ return res; } String [] keyBoard = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; dfs(digits, 0, new StringBuilder(), res, keyBoard); return res; } private void dfs(String digits, int index, StringBuilder sb, List<String> res, String [] keyBoard){ if(index == digits.length()){ res.add(sb.toString()); return; } int n = digits.charAt(index) - '0'; //"23", index = 0, n = 2, 用来找对应keyBoard的string. for(int i = 0; i<keyBoard .length(); i++){ sb.append(keyBoard .charAt(i)); dfs(digits, index+1, sb, res, keyBoard); sb.deleteCharAt(sb.length()-1); } } }
相关文章推荐
- truncate 重置sql server表 标示为1开始
- [置顶] 视频、音频、图片代理下载
- 【Photon】官方Mmo文档总结
- NoSQL详解
- Android图片转换器代码分享
- 2015年校招求职之旅
- 可穿戴设备软件研发前期整理
- Spring MVC之@RequestBody, @ResponseBody 详解
- cocos2d-x中有一个JniHelper类详细使用
- 10个出色的NoSQL数据库
- BAT掌舵人 马云李彦宏马化腾的星座故事
- Maven常用命令
- px与dp,sp的换算公式
- 内存管理-深浅拷贝之 copy和mutableCopy
- 动态代理
- NFS基本原理及实现
- GitHub详细教程
- 复习后台代码(与前面clentHttp连接网络结合)
- Wizards' Duel(物理题s=v*t)
- Android Studio 全面教程