
1 maosengshulei 2017 年 12 月 27 日 via Android DFS? |
2 coderluan 2017 年 12 月 27 日 我感觉想多了,没提复杂度,直接套循环就完了,3 的 7 次方也就 2000 多行而已,想让代码好看你弄个递归。 |
3 coderluan 2017 年 12 月 27 日 PS : 你的分析我一个都看不明白,一行一个对着问题有啥影响,存文本又是闹哪样,你先把结果存个数组里不行吗? |
4 rrfeng 2017 年 12 月 27 日 via Android 这玩意儿需要什么数据结构??! |
5 hoyixi 2017 年 12 月 27 日 lz 截图该把题干截完整,你转述是你自己的理解和你自己的语言。 |
6 MSilen 2017 年 12 月 27 日 via Android void wtf(String phone,String result){ if(null==phone||phone.equals("")){ 打印 result; return; } char a=获取 phone 第一个 char; 遍历 a 对应的三个字母{ wtf(phone 去掉第一个,result 加上遍历的字母); } } 差不多这样吧 |
7 GeruzoniAnsasu 2017 年 12 月 27 日 这东西是递归解的,这么说明不明白? Encode( prefix,numberSeries ) { if(numberSeries == end()){ output(prefix); return; } curNumber = numberSeries[0]; for(letter in letterTable[curNumber]){ prefix=prefix+letter; Encode( prefix,numberSeries+1 ); } } |
8 ZZZZone 2017 年 12 月 27日 三种情况暴搜吧, 数字转字符处理一下就行。 #include <cstdio> #include <cstring> #include <string> #include <iostream> using namespace std; string s; int len; void dfs(string t, int tot){ if(tot == len){ cout << t << endl; return; } int x = (s[tot] - '0'); x = (x - 2) * 3; dfs(t + (char)(x+'A'), tot + 1); dfs(t + (char)(x+1+'A'), tot + 1); dfs(t + (char)(x+2+'A'), tot + 1); } int main(){ cin >> s; len = s.length(); dfs("", 0); } |
9 SaulLawliet 2017 年 12 月 27 日 |
10 ofblyt 2017 年 12 月 27 日 这个就是 dfs 和 backtrace 吧,正好最近在看 leetcode |
11 zhujinliang 2017 年 12 月 27 日 我一般这样解决: 把结果看作 3 进制的数字,0,1,2 分别对应三个字母,对整个数字不断自增 1,最终就可以遍历所有的可能 比如 234,是 "ABC" "DEF" "GHI" 的所有可能组合 0 对应 3 进制 000 第一位 0 对应 A 第二位 0 对应 D 第三位 0 对应 G 1 对应 3 进制 001 第一位 1 对应 B 第二位 0 对应 D 第三位 0 对应 G 2 对应 3 进制 002 第一位 2 对应 C 第二位 0 对应 D 第三位 0 对应 G 3 对应 3 进制 010 第一位 0 对应 A 第二位 1 对应 E 第三位 0 对应 G 4 对应 3 进制 011 第一位 1 对应 B 第二位 1 对应 E 第三位 0 对应 G 依次类推 手头没有 C 工具,用 go 撸了个 https://play.golang.org/p/ibNWC9QhBcj |