Excel Sheet Column Number/Excel Sheet Column Title

Excel Sheet Column Number

Related to question Excel Sheet Column Title

Given a column title as appear in an Excel sheet, return its corresponding column number.

For example:

    A -> 1
    B -> 2
    C -> 3
    ...
    Z -> 26
    AA -> 27
    AB -> 28 
public class Solution {
    public int titleToNumber(String s) {
        if(s.equals("")) return 0;
        char[] title = s.toCharArray();
        int len = title.length;
        int num = 0;
        for(int i=0; i<len; i++){
            num += (int) ((title[i] - 'A' + 1) * Math.pow(26, len-i-1));
        }
        return num;
    }
}

Excel Sheet Column Title

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 
public class Solution {
    public String convertToTitle(int n) {
        StringBuilder sb = new StringBuilder();
        int mod = 0;
        char c;
        while(n > 0){
            mod = (n-1) % 26;
            c = (char) (65 + mod);
            sb.append(c);
            n = (n-1) / 26;
        }
        return sb.reverse().toString();
    }
}

答案这里的用(n-1)很重要,如果将上述答案中的(n-1)改为n,然后把65 改为64(ASCII中‘A’是65),你会发现,对于大多数转换依然是对的,但是对于出现了‘Z’的转换会出错,为什么呢?

首先,这两道题无非就是 10进制 与 26进制 相互转换,而我们在学习基础编程语言,比如C++和Java时,相信 10进制 与 16进制 相互转换时最常见的题目了,所以博主一开始也是没有多想,在第二道题上,用【取模运算得到最低位的字符】,然后用【除法运算消去最低位】的算法。但是,在这里真的可以用【除法运算消去最低位】吗?

如果最低位是 Z ,也就代表了26,除以一个26,结果是 1 啊,没有消去;但是如果最低位是A-Y的话,做一个除法,结果就是0了,成功消去了最低位,这也是为什么刚刚错误的算法对于大多数情况得出的结果还是对的的原因。

参照10进制转16进制。16进制的数字是从0开始编码的(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F),可以理解为(0-15),一个位上的最大的数也就是15,除以基数16,最低位就消去了。所以,10进制转16机制中,是没有上述问题的。

所以,博主想到的办法就是n-1,使除法运算可以消去最低位;而且n-1对于取模运算实际上没什么影响,因为最后的结果无非就是差了1而已:

A-1% 26 = 0;Z-1% 26 = 25;

太容易修正了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值