美团2015笔试题以及最优解(四)

来源:互联网 发布:小电影网站 知乎 编辑:程序博客网 时间:2024/05/22 06:15
题目: * 一个 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"));    }


1 0
原创粉丝点击