注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
https://leetcode.com/problems/letter-combinations-of-a-phone-number/
中等难度题目,看到组合就想到dfs,然后实现。实现之后就一直溢出。后来发现是一个非常非常细节的问题,但是有点不明白。
代码是这样的:- public static List<String> letterCombinations(String digits) {
- List<String> res = new ArrayList<String>();
- if(digits == null || digits.length()==0){
- return res;
- }
- StringBuilder tmp = new StringBuilder();
- HashMap<Integer, String> map = new HashMap<Integer, String>();
- map.put(1, "");
- 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, " ");
- dfs(res, map, tmp, 0, digits);
-
- return res;
- }
- private static void dfs(List<String> res, HashMap<Integer, String> map, StringBuilder tmp,
- int num, String digits) {
- // TODO Auto-generated method stub
- if(num == digits.length()){
- res.add(tmp.toString());
- return;
- }
- Integer key = Integer.valueOf(String.valueOf(digits.charAt(num)));
- String letters = map.get(key);
-
- for(int i=0;i<letters.length();i++){
- tmp.append(letters.charAt(i));
- dfs(res, map, tmp, num+1, digits);
- tmp.deleteCharAt(tmp.length()-1);
- }
- }
复制代码 递归调用部分的第四个参数,也就是深度,或者说输入按键的第N个,这里要一直增加,一开始我用了num++,这个溢出,我还了解,后来我用了++num,还有在之前,先把num++,后面dfs里直接用增加后的num,这两种就会蹦出outOfIndex,发生在上面取key得那行,为啥会out呢,我上面有判断呀。
求解~求交流!~
|