剑指offer:excel列号转数字

问题说明:在Excel2003中,用A表示第1列,B表示第2列......Z表示第26列,AA表示27列,AB表示第28列......以此类推。写出由excel列号转数字和数字转列号的函数。

private static final char[] excelLetterTable = {'A', 'B', 'C', 'D', 'E',
						'F', 'G', 'H', 'I', 'J',
						'K', 'L', 'M', 'N', 'O',
						'P', 'Q', 'R', 'S', 'T',
						'U', 'V', 'W', 'X', 'Y', 
						'Z'};
private static final char FIRST_CHAR_EXCEL_LETTER = 'A';
private static final int EXCEL_RADIX = 26;
public static int excelSequenceToDigit(String sequence) {		
	if (sequence == null) {
		return 0;
	}
	int result = 0;
	for (int i = 0; i < sequence.length(); i++) {
		result = EXCEL_RADIX * result + 
				 Character.toUpperCase(sequence.charAt(i)) - 
				 FIRST_CHAR_EXCEL_LETTER + 1;
	}
	return result;
}
public static String digitToExcelSequence(int number) {
	if (number <= 0) {
		return null;
	}
	char[] reslut = new char[32];
	int charPos = 32;
	int current = number;
	int remainder = 0;
	while (current != 0) {
		remainder = current % EXCEL_RADIX;// 0 ~ radix - 1
		if (remainder == 0) {
			remainder = EXCEL_RADIX;
			current -= 1;
		}
		reslut[--charPos] = excelLetterTable[remainder - 1];
		current /= EXCEL_RADIX;
	}
	return new String(reslut, charPos, 32 - charPos);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值