博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode(17) - Letter Combinations of a Phone Number
阅读量:5244 次
发布时间:2019-06-14

本文共 1534 字,大约阅读时间需要 5 分钟。

  经典的backtracking(回溯算法)的题目。当一个题目,存在各种满足条件的组合,并且需要把它们全部列出来时,就可以考虑backtracking了。当然,backtracking在一定程度上属于穷举,所以当数据特别大的时候,不合适。而对于那些题目,可能就需要通过动态规划来完成。

  这道题的思路很简单,假设输入的是"23",2对应的是"abc",3对应的是"edf",那么我们在递归时,先确定2对应的其中一个字母(假设是a),然后进入下一层,穷举3对应的所有字母,并组合起来("ae","ad","af"),当"edf"穷举完后,返回上一层,更新字母b,再重新进入下一层。这个就是backtracing的基本思想。

  代码如下:

1 public class Solution { 2     public List
letterCombinations(String digits) { 3 //把table上的数字对应的字母列出来,当输入为2是,digits[2]就是2所对应的"abc" 4 String[] table = new String[] 5 {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; 6 List
list = new ArrayList
(); 7 //index从0开始,即digits的第一个数字 8 letterCombinations(list,digits,"",0,table); 9 return list;10 }11 12 private void letterCombinations (List
list, String digits, 13 String curr, int index,String[] table) {14 //最后一层退出条件15 if (index == digits.length()) {16 if(curr.length() != 0) list.add(curr);17 return;18 }19 20 //找到数字对应的字符串21 String temp = table[digits.charAt(index) - '0'];22 for (int i = 0; i < temp.length(); i++) {23 //每次循环把不同字符串加到当前curr之后24 String next = curr + temp.charAt(i);25 //进入下一层26 letterCombinations(list,digits,next,index+1,table);27 }28 }29 }

 

转载于:https://www.cnblogs.com/kepuCS/p/5271654.html

你可能感兴趣的文章
hihoCoder 1233 : Boxes(盒子)
查看>>
oracle中anyData数据类型的使用实例
查看>>
软件测试——性能测试总结
查看>>
12.4站立会议
查看>>
客户端访问浏览器的流程
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
python-三级菜单和购物车程序
查看>>
条件断点 符号断点
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>