LeetCode 17.Letter Combinations of a Phone Number
来源:互联网 发布:安卓扫雷源码 编辑:程序博客网 时间:2024/06/04 23:33
题目:
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"].分析与解答:
题目不难,主要是利用递归的DFS。把手机键盘保存在一个map<char,string>中,对digits进行递归,找到其每一位在map中对于的string即可,如下:
class Solution {private: vector<string> result; map<char, string> letterSet;public:void createLetterSet() {letterSet.clear();letterSet['1'] = "";letterSet['2'] = "abc";letterSet['3'] = "def";letterSet['4'] = "ghi";letterSet['5'] = "jkl";letterSet['6'] = "mno";letterSet['7'] = "pqrs";letterSet['8'] = "tuv";letterSet['9'] = "wxyz";}vector<string> letterCombinations(string digits) {result.clear();createLetterSet();dfs(0, digits, "");return result;}void dfs(int depth, string &digits, string ans) {if (depth == digits.size()) {result.push_back(ans);return;}for (int i = 0; i < letterSet[digits[depth]].size(); i++) {dfs(depth + 1, digits, ans + letterSet[digits[depth]][i]);}}};
当然了,有时候题会说禁止用递归,那就用一个DFS的非递归版本,写起来难度比递归的大一些,如下,:
class Solution1 {private:vector<string> result;map<char, string> letterSet;public:void createLetterSet() {letterSet.clear();letterSet['1'] = "";letterSet['2'] = "abc";letterSet['3'] = "def";letterSet['4'] = "ghi";letterSet['5'] = "jkl";letterSet['6'] = "mno";letterSet['7'] = "pqrs";letterSet['8'] = "tuv";letterSet['9'] = "wxyz";}vector<string> letterCombinations(string digits) {result.clear();if (!digits.size()) {result.push_back("");return result;}const int size = digits.size();createLetterSet();vector<int> numbers(size);/*int *numbers = new int[size];memset(numbers, 0, sizeof(int) * size);*/int k = size - 1;while (k >= 0) {k = size - 1;string tempStr(size, '0');for (int i = 0; i < size; i++) {tempStr[i] = letterSet[digits[i]][numbers[i]];}result.push_back(tempStr);while (k >= 0) {if (numbers[k] < letterSet[digits[k]].size()) {numbers[k]++;break;} else {k--;numbers[k] = 0;}}}delete[] numbers;return result;}};不过这个方法出现了MLE。。。但应该是正确的
0 0
- LeetCode: Letter Combinations of a Phone Number
- LeetCode Letter Combinations of a Phone Number
- LeetCode: Letter Combinations of a Phone Number
- [Leetcode] Letter Combinations of a Phone Number
- [LeetCode] Letter Combinations of a Phone Number
- 【leetcode】Letter Combinations of a Phone Number
- LeetCode: Letter Combinations of a Phone Number
- [LeetCode]Letter Combinations of a Phone Number
- LeetCode-Letter Combinations of a Phone Number
- [LeetCode] Letter Combinations of a Phone Number
- LeetCode - Letter Combinations of a Phone Number
- LeetCode:Letter Combinations of a Phone Number
- LeetCode | Letter Combinations of a Phone Number
- leetcode Letter Combinations of a Phone Number
- Leetcode: Letter Combinations of a Phone Number
- 【leetcode】Letter Combinations of a Phone Number
- [LeetCode] Letter Combinations of a Phone Number
- leetcode: Letter Combinations of a Phone Number
- Leetcode: Largest Number
- HDU 3980 Paint Chain(博弈 SG)
- 【机器学习】机器学习(一)——基于概率论的分类
- iOS开发-ARC下weak strong使用
- Cannot assign to 'self' outside of a method in the init family
- LeetCode 17.Letter Combinations of a Phone Number
- 上楼梯问题
- Projections常用的聚合查询方法介绍
- burpsuit安装及使用教程
- 构造函数和析构函数是否可以被重载
- Codeforces 490A Team Olympiad(水)
- android之绑定服务调用服务的方法
- HDU 4355 - Party All the Time(三分)
- 将jquery的datatables插件转为中文