9
回答
一个很简单的算法问题
终于搞明白,存储TCO原来是这样算的>>>   

已知 形如:String[] input = {"A","B","D","Z","AG","EGF"};

得到 Integer[] ouput = {0,1,3,25,32, 3567};

求算法

<无标签>
举报
唯一
发帖于7年前 9回/470阅
共有9个回帖 最后回答: 7年前

饿,我写出来了,好吧,我分享一下

public static Integer[] transformCloumnID(String[] input) {
        Integer[] output = new Integer[input.length];
        for (int i = 0; i < input.length; i++) {
            char c[] = input[i].toUpperCase().toCharArray();
            if(c.length < 1){
                output[i] = 0;
               
            }
            else {
                int length = c.length;
                int sum = 0;
                for(int j=0;j<c.length;j++){
                   
                    sum += (((int)c[j])-64) * Math.pow(26,length-j-1);
                }
                output[i] = sum - 1;
            }
        }
        return output;

    }

 

我为什么写这个问题呢,因为我一开始用26 ^ (length-j-1)这样写的,半天不对啊,然后我就不知道咋办了,秀逗了

我在写一个Excel转数据库的项目,最近总是秀逗,哎,可能跟我那本装不上linux有关吧

引用来自#5楼“红薯”的帖子

其实每个字符直接减 A 即可

char 也就是 int

改成 sum += (c[j]- 64) * Math.pow(26,length-j-1);

c[j]-'A'的话会有0后面再乘的话会不爽啊 baidu上google了一下发现64=@ 哈哈

sum += (c[j]- '@') * Math.pow(26,length-j-1);会不会很帅呢

引用来自#6楼“唯一”的帖子

引用来自#5楼“红薯”的帖子

其实每个字符直接减 A 即可

char 也就是 int

改成 sum += (c[j]- 64) * Math.pow(26,length-j-1);

c[j]-'A'的话会有0后面再乘的话会不爽啊 baidu上google了一下发现64=@ 哈哈

sum += (c[j]- '@') * Math.pow(26,length-j-1);会不会很帅呢

效率咋么样

引用来自#7楼“huxuanhui”的帖子

引用来自#6楼“唯一”的帖子

引用来自#5楼“红薯”的帖子

其实每个字符直接减 A 即可

char 也就是 int

改成 sum += (c[j]- 64) * Math.pow(26,length-j-1);

c[j]-'A'的话会有0后面再乘的话会不爽啊 baidu上google了一下发现64=@ 哈哈

sum += (c[j]- '@') * Math.pow(26,length-j-1);会不会很帅呢

效率咋么样

请教一下怎么测试效率

引用来自#8楼“唯一”的帖子

引用来自#7楼“huxuanhui”的帖子

引用来自#6楼“唯一”的帖子

引用来自#5楼“红薯”的帖子

其实每个字符直接减 A 即可

char 也就是 int

改成 sum += (c[j]- 64) * Math.pow(26,length-j-1);

c[j]-'A'的话会有0后面再乘的话会不爽啊 baidu上google了一下发现64=@ 哈哈

sum += (c[j]- '@') * Math.pow(26,length-j-1);会不会很帅呢

效率咋么样

请教一下怎么测试效率

运行时间和占用的内存,具体我也不知道撒,只是随便问问

顶部