打印字母组合
来源:互联网 发布:形容女人漂亮网络用语 编辑:程序博客网 时间:2024/04/30 12:51
http://haixiaoyang.wordpress.com/category/dynamic-programming/
/*get all possibilities of letter combinationsa->1, b->2, ...., z->26so for "112" it returns 3, which are1,1,2 => aab11,2 => kb1,12 => al*/int _inner_ways(const char* pStr){if (*pStr == 0) return 1;if (*pStr <= '0' || *pStr > '9')return 0;int n = _inner_ways(pStr+1);if ((*pStr == '1' && *(pStr + 1) >= '0' && *(pStr + 1) <= '9') || (*pStr == '2' && *(pStr + 1) >= '0' && *(pStr + 1) <= '6'))n += _inner_ways(pStr+2);return n;}int GetWays(const char* pStr){if (NULL == pStr || *pStr == 0)return 0;return _inner_ways(pStr);}int GetWaysDP(const char* pStr){if (NULL == pStr || *pStr == 0)return 0;int nLen = strlen(pStr);int nTmp2 = 1;int nTmp1 = 0;if (pStr[nLen-1] > '0' && pStr[nLen-1] <= '9')nTmp1 = 1;int nRes = nTmp1;for (int i = nLen-2; i >= 0; i--){int nTmp = 0;if (pStr[i] > '0' && pStr[i] <= '9')nTmp += nTmp1;if ((pStr[i] == '1' && pStr[i+1] >= '0' && pStr[i+1] <= '9') || (pStr[i] == '2' && pStr[i+1] >= '0' && pStr[i+1] <= '6'))nTmp += nTmp2;nRes = nTmp;nTmp2 = nTmp1;nTmp1 = nRes;}return nRes;}
第一种方法是递归,但是递归明显有很多重复计算
第二种方法是动态规划,这里dp是从右向左的
- 打印字母组合
- 打印所有字母所有可能的组合
- 输入abcd 打印所有字母的组合
- 打印所有小写字母所有可能的组合
- 打印给定一字符串的所有字母组合——递归实现
- 打印组合
- 打印组合
- 打印组合
- 字母组合算法
- loadrunner--随机字母组合
- 字母组合算法
- 电话号码的字母组合
- 电话号码的字母组合
- 三字母字符串组合
- 电话号码的字母组合
- 电话号码的字母组合
- 电话号码的字母组合
- 循环打印菱形字母
- CV会议+领先研究室+专家+代码网址
- 算法导论CLRS 8.4 桶排序
- 经典语录
- ActivityGroup与EditText焦点问题
- 基于TCP半连接SYN Flooding攻击原理及防范
- 打印字母组合
- centos6 无法显示图形界面了
- 编写操作系统1(用户态进程)
- 分形
- Mysql中文乱码问题
- awk 命令全解析
- Zend Framework 开始
- poj 1155 TELE 树形dp
- 乳牛悲惨的一生 -----奶牛为什么会产奶?