leetcode 手机九宫格输入字母组合
2016-08-29 16:17
2687 查看
题目出处:https://leetcode.com/problems/letter-combinations-of-a-phone-number/
计算输入字母组合
例子:
分析:
两种方法解决:
1. 预先计算总长度,逐个更新字母。 以"23"为例输出的结果是:
2. 递增求解, 以“23”为例, 输出的结果是
算法1代码:
vector<string> letterCombinations(string digits) {
// cout<< digits.length() <<endl;
if(digits.length() <= 0) return vector<string>();
string tag[10] = {"", "hX", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
//count length
int length = 1;
for(int i = 0; i < digits.length(); i++){
int n = digits[i] == '#' ? 1 : digits[i] - '0';
length *= tag
.length();
}
vector<string> ret(length, string(digits.length(), '\0'));
int curLength = length;
for(int i = 0; i < digits.length(); i++){
// get index
int n = digits[i] == '#' ? 1 : digits[i] - '0';
curLength /= tag
.length();
for(int j = 0; j < length; j++){
ret[j][i] = tag
[j/curLength%tag
.length()];
}
}
return ret;
}
算法2代码:
vector<string> letterCombinations(string digits) {
if(digits.length() <= 0) return vector<string>();
string tag[10] = {"", "hX", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> ret;
for(int i = 0; i < digits.length(); i++){
int n = digits[i] == '#' ? 1 : digits[i] - '0';
int size = ret.size() == 0 ? 1 : ret.size();
ret.resize(size * tag
.length());
for(int j = ret.size()-1; j >= 0; j--)
ret[j] = ret[j%size] + tag
[j/size];
}
return ret;
}
计算输入字母组合
例子:
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
分析:
两种方法解决:
1. 预先计算总长度,逐个更新字母。 以"23"为例输出的结果是:
a | d |
a | e |
a | f |
b | d |
b | e |
b | f |
c | d |
c | e |
c | f |
a | d |
b | d |
c | d |
a | e |
b | e |
c | e |
a | f |
b | f |
c | f |
vector<string> letterCombinations(string digits) {
// cout<< digits.length() <<endl;
if(digits.length() <= 0) return vector<string>();
string tag[10] = {"", "hX", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
//count length
int length = 1;
for(int i = 0; i < digits.length(); i++){
int n = digits[i] == '#' ? 1 : digits[i] - '0';
length *= tag
.length();
}
vector<string> ret(length, string(digits.length(), '\0'));
int curLength = length;
for(int i = 0; i < digits.length(); i++){
// get index
int n = digits[i] == '#' ? 1 : digits[i] - '0';
curLength /= tag
.length();
for(int j = 0; j < length; j++){
ret[j][i] = tag
[j/curLength%tag
.length()];
}
}
return ret;
}
算法2代码:
vector<string> letterCombinations(string digits) {
if(digits.length() <= 0) return vector<string>();
string tag[10] = {"", "hX", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> ret;
for(int i = 0; i < digits.length(); i++){
int n = digits[i] == '#' ? 1 : digits[i] - '0';
int size = ret.size() == 0 ? 1 : ret.size();
ret.resize(size * tag
.length());
for(int j = ret.size()-1; j >= 0; j--)
ret[j] = ret[j%size] + tag
[j/size];
}
return ret;
}
相关文章推荐
- LeetCode 17. Letter Combinations of a Phone Number--输入数字,每个数字对应手机键盘的字符,输出组合的字符串
- LeetCode17——Letter Combinations of a Phone Number(手机几个按键对应的字母(符号)组合)
- leetcode:Letter Combinations of a Phone Number(手机号码的字母组合)
- leetcode——Letter Combinations of a Phone Number 手机按键字母组合(AC)
- js验证只能输入字母,数字或字母数字组合正则表达式
- 手机九宫格滑锁密码的所有密码组合计算
- iOS 正则表达式输入内容判断--位数、字母数字符号等组合判断
- [LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合
- LeetCode 17 Letter Combinations of a Phone Number 数字转为字母组合
- 输入数字,返回数字代表的字母的所有组合
- [LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合
- leetcode解题之242# Valid Anagram Java版 (判断两个字母串是否具有相同的字母组合)
- html 输入框 只能输入数字 只能输入字母数字 等组合
- 正则表达式限制文本框只能输入数字,小数点,英文字母,汉字及其组合
- 17. Letter Combinations of a Phone Number(根据手机按键求字母的组合)
- 输入abcd 打印所有字母的组合
- LeetCode-Letter Combinations of a Phone Number-电话号码字母组合-DFS
- Letter Combinations of a Phone Number (电话号码字母组合) 【leetcode】
- 利用JavaScript实现密码录入框只允许输入数字和字母的组合
- Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合