美团2015笔试题以及最优解(四)
2015-12-22 10:44
309 查看
题目: * 一个 char 类型的数组 chs,其中所有的字符都不同。 例如,chs=['A', 'B', 'C', ... 'Z'],则字符串与整数的对应关系如下: A, B... Z, AA,AB...AZ,BA,BB...ZZ,AAA...
* ZZZ, AAAA... 1, 2...26,27, 28... 52,53,54...702,703...18278, 18279... 例如,chs=['A', 'B', 'C'],则字符串与整数的对应关系如下:
* A,B,C,AA,AB...CC,AAA...CCC,AAAA... 1, 2,3, 4, 5 ...12, 13 ... 39, 40... 给定一个数组 chs,实现根据对应关系完成字符串与整数相互转换的两个函数
算法思路:利用伪n进制的算法进行位数解析(QQ:3036643587 欢迎交流)
public class TransforString {
/**
*
* 功能描述:将数字转换成对应的字符串
*
* @param chs 字符串数组 eg:['A','B','V']
* @param n 待转换的数字
* @return
* @author jiaozhb/15072775
*/
public static String getString(char[] chs,
int n) {
int cur = 1;// 个位数字全是1
int base = chs.length;// 转换基数
int len = 0;// 字符结果长度,初始默认为0
//
while (n >= cur) {
len++;
n -= cur;
cur *= base;
}
char[] res = new char[len];
int index = 0;
int nCur = 0;
do {
cur /= base;
nCur = n / cur;
res[index++] = getCharAtValue(chs, nCur + 1);
n %= cur;
} while (index != res.length);
return String.valueOf(res);
}
/**
*
* 功能描述:将对应的字符串转换成数字
* @param chs 元素数组
* @param s 字符串
* @return 对应数字
* @author jiaozhb/15072775
*/
public static int getInt(char[] chs,String s){
int res = 0;
int base = chs.length;
int eValue = 0;
for(int i=s.length(),j=0;i>0;i--,j++){
eValue = getCharAtIndex(chs, s.charAt(i-1));
res+=eValue*(int)Math.pow(base, j);
}
return res;
}
/**
*
* 功能描述:获取数组在元素s上的位置
*
* @param chs
* @param s
* @return
* @author jiaozhb/15072775
*/
public static int getCharAtIndex(char[] chs,
char s) {
String chs_1 = String.valueOf(chs);
String s_1 = String.valueOf(s);
int res = chs_1.indexOf(s_1);
if(res<0){
return 0;
}
return res+1;
}
/**
*
* 功能描述:获取数组在k位置上的值
*
* @param chs
* @param k
* @return
* @author jiaozhb/15072775
*/
public static char getCharAtValue(char[] chs,
int k) {
if (k < 1 || k > chs.length) {
return 0;
}
return chs[k - 1];
}
public static void main(String[] args) {
char[] chs = {
'A',
'B',
'C'
};
int n = 12;
// System.out.println(getString(chs, n));
// System.out.println(getCharAtIndex(chs, 'A'));
System.out.println(getInt(chs, "AA"));
}
* ZZZ, AAAA... 1, 2...26,27, 28... 52,53,54...702,703...18278, 18279... 例如,chs=['A', 'B', 'C'],则字符串与整数的对应关系如下:
* A,B,C,AA,AB...CC,AAA...CCC,AAAA... 1, 2,3, 4, 5 ...12, 13 ... 39, 40... 给定一个数组 chs,实现根据对应关系完成字符串与整数相互转换的两个函数
算法思路:利用伪n进制的算法进行位数解析(QQ:3036643587 欢迎交流)
public class TransforString {
/**
*
* 功能描述:将数字转换成对应的字符串
*
* @param chs 字符串数组 eg:['A','B','V']
* @param n 待转换的数字
* @return
* @author jiaozhb/15072775
*/
public static String getString(char[] chs,
int n) {
int cur = 1;// 个位数字全是1
int base = chs.length;// 转换基数
int len = 0;// 字符结果长度,初始默认为0
//
while (n >= cur) {
len++;
n -= cur;
cur *= base;
}
char[] res = new char[len];
int index = 0;
int nCur = 0;
do {
cur /= base;
nCur = n / cur;
res[index++] = getCharAtValue(chs, nCur + 1);
n %= cur;
} while (index != res.length);
return String.valueOf(res);
}
/**
*
* 功能描述:将对应的字符串转换成数字
* @param chs 元素数组
* @param s 字符串
* @return 对应数字
* @author jiaozhb/15072775
*/
public static int getInt(char[] chs,String s){
int res = 0;
int base = chs.length;
int eValue = 0;
for(int i=s.length(),j=0;i>0;i--,j++){
eValue = getCharAtIndex(chs, s.charAt(i-1));
res+=eValue*(int)Math.pow(base, j);
}
return res;
}
/**
*
* 功能描述:获取数组在元素s上的位置
*
* @param chs
* @param s
* @return
* @author jiaozhb/15072775
*/
public static int getCharAtIndex(char[] chs,
char s) {
String chs_1 = String.valueOf(chs);
String s_1 = String.valueOf(s);
int res = chs_1.indexOf(s_1);
if(res<0){
return 0;
}
return res+1;
}
/**
*
* 功能描述:获取数组在k位置上的值
*
* @param chs
* @param k
* @return
* @author jiaozhb/15072775
*/
public static char getCharAtValue(char[] chs,
int k) {
if (k < 1 || k > chs.length) {
return 0;
}
return chs[k - 1];
}
public static void main(String[] args) {
char[] chs = {
'A',
'B',
'C'
};
int n = 12;
// System.out.println(getString(chs, n));
// System.out.println(getCharAtIndex(chs, 'A'));
System.out.println(getInt(chs, "AA"));
}
相关文章推荐
- 塞尔将向阿里巴巴集团总裁迈克尔埃文斯汇报工作
- 策略(Strategy)模式
- ios 分享功能和真机调试
- STL---哈希map:unordered_map
- getopt_long函数用法
- vs快捷键相关
- jar命令
- 序列化LinkedHashMap,有序输出Json字符串
- 小满优品是一家总部设在大连高新区的文创电商企业
- activiti 准备工作
- cannot read property 'nodeName' of null 的原因
- 24点游戏算法
- wordpress 4.4 禁用REST API/移除wp-json链接的两种方法
- Apktool|ShakaApktool 简体中文汉化版|APK反编译工具(12月20日更新)
- 哈理工hrbust OJ 2225 解题报告
- 安卓 WebView无法访问天猫 net::ERR_UNKNOWN_URL_SCHEME
- MySQL按周、按日和按月分组统计数据
- 设计一个圆柱体类,计算表面积及体积。建立一个半径为3、高为3.5的圆柱体,输出其表面积及体积
- AngularJS 事件
- 数字证书简介及Java编码实现