Excel表列序号


Excel表列序号

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
给你一个字符串 columnTitle,表示 Excel 表格中的列名称
返回 该列名称对应的列序号

例如:
A -> 1 B -> 2 C -> 3
Z -> 26 AA -> 27 AB -> 28

示例 1:
输入: columnTitle = "A"
输出: 1

示例 2:
输入: columnTitle = "AB"
输出: 28

示例 3:
输入: columnTitle = "ZY"
输出: 701

解法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
思路:
相当于将26进制的数字转化为十进制
注意 起始下标为1

代码:
/**
* @param String $columnTitle
*
* @return Integer
*/
function titleToNumber($columnTitle)
{
$count = strlen($columnTitle);
$nums = 0;
for ($i = 0; $i < $count; $i++) {
// 每个字母和字母A的差值为实际的十进制数字,由于下标是以1开始的,所以要加上1
$d = ord($columnTitle[$i]) - ord('A') + 1;
// 需要乘位数-1次数的26,和二进制数转十进制的算法一致
for ($j = 0; $j < $count - $i - 1; $j++) {
$d *= 26;
}
$nums += $d;
}

return $nums;
}

同理可得二进制转十进制算法
function titleToNumber($columnTitle)
{
$count = strlen($columnTitle);
$nums = 0;
for ($i = 0; $i < $count; $i++) {
$d = $columnTitle[$i];
for ($j = 0; $j < $count - $i - 1; $j++) {
$d *= 2;
}
$nums += $d;
}

return $nums;
}