Letter Combinations of a Phone Number [leetcode]谈谈循环解法的两种思路

来源:互联网 发布:网络情歌对唱 编辑:程序博客网 时间:2024/06/05 06:02

本系列博文中有很多两种思路的,其实是因为第一遍刷题的时候有一个想法,第二遍刷题的时候已经忘掉之前的思路了,又有新的想法了。

同时大部分代码我也同时PO到leetcode的对应题目的问答中去了,所以如果你也查看问题讨论的话会发现有和我一模一样的代码,其实就是我PO的:)

书接正文,基于循环的两种思路如下:


第一种思路

比如“234”这个字符串,我可以先将0...1的所有排列找到-->{"a", "b", "c"}

再进一步将0...2的所有排列找到-->{"ad", "ae","af", "bd", "be", "bf", "cd", "ce", "cf"}

如此循环...直到字符串末尾。实现如下

vector<string> letterCombinations(string digits) {        vector<string> res;        string charmap[10] = {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};        res.push_back("");        for (int i = 0; i < digits.size(); i++)        {            vector<string> tempres;            string chars = charmap[digits[i] - '0'];            for (int c = 0; c < chars.size();c++)                for (int j = 0; j < res.size();j++)                    tempres.push_back(res[j]+chars[c]);            res = tempres;        }        return res;    }


第二种思路

先生成"234"的第一个可行解"adg",再在可行解上衍生出其他解

类似数数的时候遇到9就变成0并进位

vector<string> letterCombinations(string digits) {string charmap[10] = {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};vector<string> res;string alpha;for (int i = 0; i < digits.size(); i++)alpha += charmap[digits[i] - '0'][0];while (true){res.push_back(alpha);//寻找可行解bool find = false;for (int i = digits.size() - 1; i >= -1 && ! find; i--){if (i == -1)return res;//遍历结束string chars = charmap[digits[i] - '0'];if (alpha[i] == chars[chars.size() - 1])//遍历第i个数字的最后一个可行解,重置并寻找第i+1个数字的可行解{alpha[i] = chars[0];continue;}for (int c = 0; c < chars.size() && ! find; c++)//遍历第i个数字的其他可行解{    if (alpha[i] == chars[c])    {        alpha[i] = chars[c+1];        find = true;    }}}}}



2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 dota2饰品被好友礼物怎么办 dota2接收的礼物打不开怎么办 英雄联盟线上被压制怎么办 云联商城的钱怎么办 高顿财经不退款怎么办 拼多多连不上网怎么办 拼多多评分太低怎么办 拼多多限制提现怎么办 手机收不到验证码怎么办 淘宝未发货怎么取消退款怎么办 羊皮的鞋子刮坏怎么办 退货寄错了东西怎么办 毒app上买鞋尺码不合适怎么办 拼多多一直不发货怎么办 天猫国际买东西被税要退货怎么办 国外快递被税了怎么办 手机上传图片时过大怎么办 原网页被重新排版怎么办 文件目录损坏且无法读取怎么办 360木马查杀蓝屏怎么办 电脑上传的文件大小超过限制怎么办 文件最大不超过200m怎么办 抖音上传文件太大怎么办 下载ppt变成php文件怎么办 数据库bak文件损坏了怎么办? wps文档大小超出上传限制怎么办 手机百度用微盘下载不了文件怎么办 无法读取源文件或磁盘怎么办 文件中转站未安装上传控件怎么办 手机外国网址网速太差怎么办 istpng里显示不出图片怎么办 电脑上保持登录状态后怎么办 电脑打游戏闪退怎么办 实训老师教不好怎么办 善心汇损失的钱怎么办 去陌生的地方怕传销怎么办 被执行人不提供财产线索怎么办 宽带ip地址改了怎么办 移动宽带恢复出厂设置了怎么办 移动100兆网速慢怎么办 手机显示无法解析dns地址怎么办