同事问的一个问题

今天同事问了一个问题,感觉比较有意思,保存一下。

问题是这样的。比如一个字符串,"123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",从中取任意个数的字符组成新的字符串,比如“2M”,然后+1,这是要得到结果是“2N”,如果是“ZZ”的话,得到的结果应该是“111”。

实现代码如下:

import java.util.*;

/**
 * @Author: bob
 * @Description: TODO
 * @Date: 2019/8/27 17:33
 */
public class Test {

    public static String source = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";


    public static void main(String[] args) {
        String str = "1ZZ";
        String[] strs = str.split("");
        String[] sources = source.split("");
        Map<String, Integer> map = new HashMap<String, Integer>();
        int length = sources.length;
        for (int i = 0; i < length; i++) {
            map.put(sources[i], i + 1);
        }
        int zhi = 0;
        for (int i = 0; i < strs.length; i++) {
            zhi += Math.pow(length, strs.length - 1 - i) * map.get(strs[i]);
        }
        zhi += 1;
        new Test().result(zhi, length);
        StringBuilder sb = new StringBuilder();
        for (int i = list.size() - 1; i >= 0; i--) {
            sb.append(sources[list.get(i) - 1]);
        }
        System.out.println(sb.toString());
    }

    public static List<Integer> list = new ArrayList<Integer>();
    private void result(int zhi, int length) {
        int a = zhi/length;
        int b = zhi - a*length;
        list.add(b);
        if (a > length) {
            result(a, length);
        }else {
            list.add(a);
        }
    }
}

如果大家有更好的方法的话,请赐教,毕竟我不是科班出身,没学过算法(已经打算要补短板了)。

猜你喜欢

转载自www.cnblogs.com/-lanfenglanmeng/p/11421361.html