17. Letter Combinations of a Phone Number 回溯算法
来源:互联网 发布:网络管理的创新和发展 编辑:程序博客网 时间:2024/06/05 06:03
这道题是我第一次接触回溯算法,没写出来,感觉很难,小白真的是忧伤。。。
看了别人的答案,有些理解这个算法了,可是感觉自己还是独立写不出来,然后盲敲了一遍这个答案
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"].
public class Solution { public List<String> letterCombinations(String digits) { ArrayList<String> ans = new ArrayList<String>(); if(digits.length()==0) return ans; String[] keyboard = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; int index=0; StringBuilder curstr=new StringBuilder(); buildAns(digits,index,curstr,keyboard,ans); return ans; } private void buildAns(String digits,int index,StringBuilder curstr,String[] keyboard,ArrayList<String> ans){ if(curstr.length()==digits.length()){ ans.add(curstr.toString()); return; } int num=digits.charAt(index)-'0';//convert string number to int number for(int i=0;i<keyboard[num].length();i++){ curstr.append(keyboard[num].charAt(i)); buildAns(digits,index+1,curstr,keyboard,ans); curstr.deleteCharAt(curstr.length()-1); } }}
这其中用到了很多之前看到过的知识点,比如运用StringBuilder类,还有新的知识点,比如使用 string.deleteCharAt(index)这个方法,用来删除指定index上的字符
这个解答的思路如下:
ans为最后要返回的答案
keyboard为每个按钮上的string,从0-9依次赋值到keyboard数组中
index用来记录输入的digits的第几位,先让index=0,指向digits的第一位
curstr为当前的StringBuilder对象,意在直接使用append方法来添加字符
buildAns方法用来进行回溯运算
要明白,当我们得到的curstr的长度等于我们输入的digits的位数的时候,说明每一位数字都已经被对应到相应的字符了,所以这个时候要把curstr当前的字符串赋值给ans
跳出当前的循环,然后执行curstr.delete方法-------------这个在回溯算法中就是后退的那一步
0 0
- 17. Letter Combinations of a Phone Number-回溯算法
- 17. Letter Combinations of a Phone Number 回溯算法
- 17. Letter Combinations of a Phone Number 组合、回溯
- leetcode 算法 17. Letter Combinations of a Phone Number
- 17.Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 17. Letter Combinations of a Phone Number
- 使用AndroidStudio导入别人工程注意事项
- 剑指offer-60.把二叉树打印成多行
- mysql查询锁表及删除连接
- 异步拖拽上传文件--小实例
- 点击按钮生成新的按钮、表格,同时之前的按钮失去功能
- 17. Letter Combinations of a Phone Number 回溯算法
- 浅谈MVC、MVP和MVVM架构
- 使用IDEA及Gradle创建Java项目
- 数据库优化——MySQL锁问题
- Kafka端到端审计
- jsp内置对象的简单几个小题。
- gdb调试---core文件生成 core文件大小为0
- self 与 this 类内部,外部使用,
- AngularJS基于树的控制组件