一道词典算法题,讲单词隐射为词典中的顺序
来源:互联网 发布:js控制按钮 编辑:程序博客网 时间:2024/06/10 18:54
词典中单词的顺序是 a,b,c...z, aa,ab,ac...az, ba,bb,bc...,如果从第一个单词开始数,那么zzzz就是第475254个,如何将一个单词对应到这个序上?反过来给出一个整数,怎么做反向映射?
解法思路,实际单词上就是一种26进制的的表示。 只不过最终在计算值的时候每个位的最小是1 而非 0.
可以把A 隐射成0, Z 隐射成 25 但是注意计算数值的时候每个位必须加上1.
一下给出了解法,其中将数字转换为单词的时候使用了通常解法和递归解法
原代码如下
#include <stdio.h>#include <string.h>void reverse(char s[]);int strtoNum(char s[]){int value = 0, pow = 1;int len;if ((len = strlen(s)) < 1)return 0;for (int i = len - 1; i >= 0; i--){value += (s[i] - 'a' + 1) * pow;pow *= 26;}return value;}// normal algorithm using the reverse.void numtoStr(int n, char s[]){int i = 0, val = 0;if (n < 1)return;do {s[i++] = (n - 1) % 26 + 'a';n -= 1;} while ( (n /= 26) != 0);s[i] = '\0';reverse(s);}// use recursive.void numtoStr_r(int n, char s[]){static int i;int val;if (n < 1)return;if ((n - 1) / 26)numtoStr_r((n - 1) / 26, s);elsei = 0;s[i++] = (n - 1) % 26 + 'a';s[i] = '\0';}void reverse(char s[]){int i = 0, j = strlen(s) - 1;char t;for (; i < j; i++, j--){t = s[i];s[i] = s[j];s[j] = t;}}int main(int argc, char* argv[]){char num[255];//printf("%ld\n", strtoNum("abcdz"));numtoStr_r(strtoNum("abcdz"), num);printf("%s\n", num);return 0;}
0 0
- 一道词典算法题,讲单词隐射为词典中的顺序
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- 词典
- python按照词典中的单词对一一替换
- 字符串 KMP HDU 4749
- ADB 经常出现 error:device offline ,更新ADB工具包
- Android用户头像的设置
- CoreData—基础使用
- Linux shell脚本中父子进程与变量的分析
- 一道词典算法题,讲单词隐射为词典中的顺序
- IOS的签名机制
- 基于SMT32L476的hardfault分析处理
- android-Camera2Basic源码逻辑流程解析
- 使用JNI开发的经验分享
- 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
- Search Insert Position
- 求二叉树的深度
- 接口