Excel表列名称


Excel表列名称

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
给你一个整数 columnNumber,返回它在 Excel 表中相对应的列名称
例如:
A -> 1 B -> 2 C -> 3
Z -> 26 AA -> 27 AB -> 28

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

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

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

示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"

解法

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
思路:
相当于求转换为26进制的算法,不断/26,余数放在最后,将余数转化为对应的字符
注意 A-Z范围1-26,需要转成0-25

代码:
/**
* @param Integer $columnNumber
* @return String
*/
function convertToTitle($columnNumber) {
$sb = '';

while ($columnNumber > 0) {
// A-Z是1-26,转成0-25
$columnNumber--;
// 将余数转化为A-Z的字符
$sb .= chr($columnNumber % 26 + ord('A'));
// 整除
$columnNumber = intdiv($columnNumber, 26);
}

// 反转字符串
return strrev($sb);
}

同理可得转为二进制的算法
function convertToTitle($columnNumber)
{
$sb = '';

while ($columnNumber > 0) {
// 二进制是0-1,不需要$columnNumber--修正
$sb .= $columnNumber % 2;
$columnNumber = intdiv($columnNumber, 2);
}

// 反转字符串
return strrev($sb);
}