题意:

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"].

Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.(Medium)

分析:

很好的练习搜索的题目,可以用BFS和回溯法(DFS)两种方式来做一下练习。

自己写的时候没太想明白回溯的写法(参数,返回值等等),写的是BFS的解法,DFS参考的讨论区。

代码1:

 class Solution {
public:
vector<string> letterCombinations(string digits) {
string digMap[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> v;
if (digits.size() == ) {
return v;
}
queue<string> q;
for (int i = ; i < digMap[digits[] - ''].size(); ++i) {
q.push(string(,digMap[digits[] - ''][i] ));
}
for (int i = ; i < digits.size(); ++i) {
int l = q.size();
for (int j = ; j < l; ++j) {
string temp1 = q.front();
q.pop();
for (int k = ; k < digMap[digits[i] - ''].size(); ++k) {
string temp2 = temp1 + digMap[digits[i] - ''][k];
q.push(temp2);
}
}
}
while (!q.empty()) {
v.push_back(q.front());
q.pop();
}
return v;
}
};

回溯法:

 class Solution {
private:
string digMap[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
void dfs(vector<string>& v, string& tempStr, int index, string& digits) {
if (index == digits.size()) {
v.push_back(tempStr);
return;
}
for (int i = ; i < digMap[digits[index] - ''].size(); ++i) {
//tempStr += digMap[digits[index] - '0'][i];
tempStr.push_back(digMap[digits[index] - ''][i]); //string的push_back和pop_back以前没用过
dfs(v,tempStr,index + ,digits);
tempStr.pop_back();
}
}
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
if (digits.size() == ) {
return result;
}
string tempStr;
dfs(result,tempStr,,digits);
return result;
}
};
 

最新文章

  1. 针对格式文件,Python读取一定大小的文件内容
  2. javascript_data
  3. Java类加载器深入探索
  4. powerdesigner jdbc 连接 oracle
  5. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
  6. windows环境下搭建ffmpeg开发环境
  7. Camera2Raw
  8. LeetCode OJ 55. Jump Game
  9. AC自动机模板3【洛谷3796】
  10. 详解Ajax请求(二)——异步请求原理的分析
  11. 基于scrapy-redis分布式爬虫的部署
  12. Log4j 2X 日志文件路径问题
  13. python programming作业5
  14. 大文件断点上传 js+php
  15. 跟厂长学PHP7内核(四):生命周期之开始前的躁动
  16. 空类指针为什么可以调用类的成员函数 以及 A(){}和A();
  17. Croc Champ 2013 - Round 1 E. Copying Data 分块
  18. MySql Server 5.7的下载及安装详细步骤
  19. 基于Redis位图实现用户签到功能
  20. supervisor管理ELK进程

热门文章

  1. 转】Spark DataFrames入门指南:创建和操作DataFrame
  2. 制作Andriod程序的数字签名需要使用JDK
  3. 读取proc信息的可扩展实现
  4. Unity2D Keynote
  5. sql的join用法
  6. Windows PE3.0制作方法(从Win7中提取制作)
  7. UVaLive 7500 Boxes and Balls (数学)
  8. 配置IIS服务器,.apk文件下载
  9. 【绝密外泄】风哥Oracle数据库DBA高级工程师培训视频教程与内部资料v0.1
  10. 前端相关的seo技术