LeetCode --- ExcelSheetColumnTitle 、ExcelSheetColumnNumber解题分析

题目描述:Excel表的每一列列名都是由字母组成,问如何将字母转换成数字,以及如何将数字兑换列对应的字母。形式如下:

1<=>A
2<=>B
3<=>C
……
26<=>Z
27<=>AA
28<=>AB
……

解题思路:该题目就是找到数字与字母之间的转换关系。

对于给定的数字,1~26为A~Z、27~52为AA~AZ、然后是BA~BZ……所以确定两点:(1)计算时如果数字模26,则26个就对应0,所以应为n%25+1;(2)高位的字母取决于数字本身是26的几倍对应的字母顺序,比如1~26为26的0倍,27~52为26的1倍……所以给定数字转字母的实现如下:

public class Solution {
    public String convertToTitle(int n) {
        String str = "";
		while(n > 0){
			str = (char)((n-1)%26 + 65) + str;
			n = (n-1)/26;
		}
		return str;
    }
}

而对于给定字母转化为数字,则从字母高位开始,先将其转换为数字(即char=>int:a<=>64),然后对于当前位如有低位则乘一次26,至无低位出现为止。所以给定字母转数字的实现如下:

public class Solution {
    public int titleToNumber(String s) {
        int num = 0;
		for(int i=0; i<s.length(); i++)
			num = num * 26 + (s.charAt(i)-64);
		return num;
    }
}






你可能感兴趣的:(java,LeetCode,Excel)