赞
踩
今天刷Excel表序列号,大家有兴趣可以点上看看题目要求,试着做一下。
一开始我以为类似与罗马数字转换,但实际上有些的差别的,这个题目的本质是进制的转换(26进制)。
字符串都是大写字母
当列的长度为n时,列名的每个字母有26钟取值,因此长度为n的不同列名称有26n个。
定义序列number初始化为0
从右往左遍历,对于列名第i位(0<=i<n),字母第k(1~26),则序列号增加k*26i
遍历结束便可得到序列号number
- class Solution {
- public int titleToNumber(String columnTitle) {
- int number = 0;
- int multiple = 1;
- for (int i = columnTitle.length() - 1; i >= 0; i--) {
- int k = columnTitle.charAt(i) - 'A' + 1;
- number += k * multiple;
- multiple *= 26;
- }
- return number;
- }
- }
这里(-‘A’+1)实际上利用字符运算得到对应的整数(Ascal码)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。