力扣:电话号码的字母组合
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
大致思路(三个版本
1. 第一想法是检索数字种类数目,然后输出
但是有的点没想到,有可能出现单独的数字
void letterCombinations(string digits)
{vector<string> res;int arr[9] = { 0,0,0,0,0,0,0,0,0 };int count = 0;//检测一共有多少种数字for (int i = 0; i < digits.length() && count != 8; ++i){if ((digits[i] - 48) >= 1 && (digits[i] - 48) <= 9){arr[(digits[i] - 48) - 1]++;if (arr[(digits[i] - 48) - 1] == 1)count++;}}string str[8] = { "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };for (int i = 0; i < 9; ++i){string t = "";if (arr[i] == 0)continue;for (int j = i + 1; j < 9; ++j){if (arr[j] == 0)continue;for (int h = 0; h < str[i].length(); ++h){for (int z = 0; z < str[j].length(); ++z){t = "";t += str[i - 1][h];t += str[j - 1][z];cout << t << endl;}}}}return ;
}
2. 检索数字的种类,然后标记数字单个种类的数目,限制为2最大
解决了单个数字问题以及重复数字问题,但是新的问题出来了,数字的组合是不限制位数的,可能是三个的组合。
虽然可以根据count来暴力解决,但是不想做了已经(最大十八层循环,会死人的
此方法,原地爆炸。
class Solution {
public:vector<string> letterCombinations(string digits){vector<string> res;int arr[10] = { 0,0,0,0,0,0,0,0,0 };int count = 0;//检测一共有多少种数字for (int i = 0; i < digits.length() && count != 8; ++i){if ((digits[i] - 48) >= 1 && (digits[i] - 48) <= 9){if (arr[(digits[i] - 48)] != 2)arr[(digits[i] - 48)]++;if (arr[(digits[i] - 48)] == 1)count++;}}//构造一个全新的字符串string numstr = "";for (int i = 0; i < 10; ++i){for (int j = 0; j < arr[i]; ++j)numstr += (char)(i + 48);}string str[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };if (count == 1 && numstr.length() == 1){for (int i = 0; i < 10; ++i){if (arr[i] == 0)continue;else{string t = "";for (int j = 0; j < str[i].length(); ++j){t = str[i][j];res.push_back(t);}}}}elsefor (int i = 0; i < numstr.length(); ++i){for (int j = i + 1; j < numstr.length(); ++j){for (int h = 0; h < str[numstr[i] - 48].length(); ++h){string t = "";for (int z = 0; z < str[numstr[j] - 48].length(); ++z){t = "";t += str[numstr[i] - 48][h];t += str[numstr[j] - 48][z];res.push_back(t);}}}}return res;}
};
3. 看了一眼官方题解,有了个全排列的思路,但是又一想貌似又不对。
官方题解:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/dian-hua-hao-ma-de-zi-mu-zu-he-by-leetcode/
1. 有用树来解决排列组合问题的,但是复杂度太大了吧。
2. 还看到一个java的队列解法,但是没看懂。(https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/javafei-chang-jing-qiao-de-dui-lie-jie-fa-by-xxxzz/)
3. c++的迭代解法(https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/cdie-dai-by-yang-xin/)
力扣:电话号码的字母组合相关推荐
- 《LeetCode力扣练习》第17题 电话号码的字母组合 Java
<LeetCode力扣练习>第17题 电话号码的字母组合 Java 一.资源 题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数 ...
- 电话号码的字母组合(力扣17)
题目描述 题目链接:力扣https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/ 给定一个仅包含数字 2-9 的字 ...
- <力扣>中等17.电话号码的字母组合
力扣 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number 著作权归领扣网络所有. ...
- 刷爆力扣之电话号码的字母组合
刷爆力扣之电话号码的字母组合 HELLO,各位看官大大好,我是阿呆
- python【力扣LeetCode算法题库】17-电话号码的字母组合
电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" ...
- 力扣(LeetCode)刷题,简单+中等题(第34期)
目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...
- LeetCode 17电话号码的字母组合(搜索)18四数之和
电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...
- 力扣(简单+中等)50题整理总结
文章目录 前言 一.简单题 1. 两数之和 7. 整数反转 9. 回文数 13. 罗马数字转整数 14. 最长公共前缀 20. 有效的括号 21. 合并两个有序链表 26. 删除有序数组中的重复项 2 ...
- 算法训练Day25 | LeetCode216. 组合总和III(和77.组合很像!);LeetCode17. 电话号码的字母组合(不同集合中组合)
目录 LeetCode216. 组合总和III 1. 思路 2. 代码实现 3. 剪枝 4. 复杂度分析 5. 思考与收获 LeetCode17. 电话号码的字母组合 1. 思路 2. 代码实现 3. ...
- 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...
最新文章
- 只需3kbps就能清晰通话,这个谷歌音频工具开源了!
- 女大男9岁 我们不可以么
- 文巾解题 189. 旋转数组
- What Influences Method Call Performance in Java?--reference
- 猿辅导、作业帮忙“圈钱”,跟谁学、有道、51Talk狂“烧钱”,在线教育钱途在哪?
- 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)
- linux mysql 修改root密码_Mac下重置mysql的root密码
- C++ vector使用的一些注意事项
- Android应用开发—setResult()的调用时机
- 线性规划与多目标规划
- C/C++中数组作为函数形参后退化为指针
- Harbor快速部署到Kubernetes集群及登录问题解决
- There is no Action mapped for namespace / and action name .
- linux 命令行美化
- SQL2005安装及连接
- 卡皇稳了,RTX3090获鲁大师Q1季度最强显卡!
- pip 在c盘的文件路径
- 常见鸟的种类及特点_湿地鸟类种类及分布特点
- (转载)香椿熟了————————食得春之鲜:香椿拌香干
- src refspec xxx does not match any 错误处理办法
热门文章
- 哪些原因会导致TFT LCD显示屏偏色?
- 数据传输 -- 字符串报文
- 2018-2-13-win10-UWP--蜘蛛网效果
- 学习FPGA之二:云端加速
- 在英文版的remix部署,拿到部署地址在中文版的remix 中 合约地址中输入地址,再部署可以实现调用 java调用智能合约Unmatched arguments from index 2
- 俄罗斯方块游戏开发 ——图形化编程java swing 项目
- 高尔顿与回归分析的起源
- Java Servlet3.0使用getPart/getParts实现单文件和多文件上传
- 58同城2014校园招聘软件测试笔试题
- 电脑提高或开启高性能模式