17.手机键盘字母组合
来源:互联网 发布:小米note软件搬家 编辑:程序博客网 时间:2024/04/30 09:41
Letter Combinations of a Phone Number
问题描述:
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"].
知识补充:
vector类
vector<string> str;str.empty();//判断数组str是否为空,为空返回truestr.pop_back();//是删除最后的元素,不是弹出最后一个元素,没有返回值str.back();//这个可以返回最后一个元素vector1.swap(vector2);//可以交换两个vector的值
类型转换
#include <sstream>stringstream ss;string s = "asda";//字符串型int number;//整型ss.clear();//如果重复使用一个stringstream,必须要先清空ss<<s;ss>>number;//转换完成string s;//字符串型int number = 123;//整型ss<<number;ss>>s;//反过来也可以int num = digits[i]-'0';//也可以直接减去0的ASCII码,得到的就是整数值
字符串遍历
for(char c:string){}//相当于正常的for循环
reduce函数
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。 def add_m(x,y): return x+y sum=reduce(add_m,(1,2,3,4,5,6,7)) print sum #结果就是输出1+2+3+4+5+6+7的结果即28当然,也可以用lambda的方法,更为简单: sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7)) print sum reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算: sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7),100) print sum#结果就是输出1+2+3+4+5+6+7的结果即128在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
测试代码(c++):
vector<string> letterCombinations(string digits) { vector<string> result; vector<string> temporary; stringstream ss; string t = ""; int j = 0,phone_number=0; string str[10] = {"", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; if(digits.empty()) { return result; } for(int i=0;i<digits.length();i++) { ss<<digits[i]; ss>>phone_number; ss.clear(); if(phone_number==0||phone_number==1) { return result; } if(result.empty()) { while(j<str[phone_number-1].length()) { result.push_back(t+str[phone_number-1][j]); j++; } continue; } while(!result.empty()) { t = result.back(); result.pop_back(); j = 0; while(j<str[phone_number-1].length()) { //t = t+str[i][j]; temporary.push_back(t+str[phone_number-1][j]); j++; } } result.swap(temporary); } return result; }
性能:
参考答案(c++):
class Solution { unordered_map<char,string> digitToLetter; vector<string> result;public: void LetterCombinationsRecur(string digits, int digitStart, string& res) { if(digitStart==digits.size()) { result.push_back(res); return; } string alphabets = digitToLetter[digits[digitStart]]; for(char ch2:alphabets) { res[digitStart]=ch2; LetterCombinationsRecur(digits,digitStart+1,res); } } vector<string> letterCombinations(string digits) { if(digits.empty()) return result; digitToLetter['2']="abc"; digitToLetter['3']="def"; digitToLetter['4']="ghi"; digitToLetter['5']="jkl"; digitToLetter['6']="mno"; digitToLetter['7']="pqrs"; digitToLetter['8']="tuv"; digitToLetter['9']="wxyz"; string res (digits.size(),'\0'); LetterCombinationsRecur(digits,0,res); return result; }};
性能:
参考答案(python):
def letterCombinations(self, digits): if '' == digits: return [] kvmaps = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' } return reduce(lambda acc, digit: [x + y for x in acc for y in kvmaps[digit]], digits, [''])
性能:
注:学会使用递归的思想提高效率
阅读全文
0 0
- 17.手机键盘字母组合
- leetcode 手机九宫格输入字母组合
- 变换莫测的TextBox 可实现数字键盘、字母键盘、组合键盘
- (java)手机键盘上字符的组合方式
- Leetcode #17 Letter Combinations of a Phone Number Z9键盘字母组合解题小节
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 手机键盘
- 键盘字母游戏
- IOS动态字母键盘
- java poi实现excel导入
- flowlibrary
- 1.圆角
- FreeRTOS任务管理与控制
- C# ctring 转换成数组
- 17.手机键盘字母组合
- Android动画 SVG VectorDrawable 基础五 Path动画
- JDBC高级编程 、DAO
- 【深度学习】Tensorflow学习笔记--MNIST
- Domino 9.0.1 for CentOS
- java-解决http提交的中文乱码问题
- 基于U-boot完成NandFlash裸板程序烧写(DNW&TFTP)
- React-Redux的用法思路
- Android平台上的JNI技术介绍