赞
踩
题目:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
…
Z -> 26
AA -> 27
AB -> 28
…
链接: 力扣Leetcode - 168. Excel表列名称.
示例1:
输入:columnNumber = 1
输出:“A”
示例 2:
输入:columnNumber = 28
输出:“AB”
示例 3:
输入:columnNumber = 701
输出:“ZY”
示例 4:
输入:columnNumber = 2147483647
输出:“FXSHRXW”
思路: 这道题本质就是进制转换,10进制转26进制,关系如下:
columnNumber | columnNumber%26(余数) | 对应字母 |
---|---|---|
1 | 1 | A |
2 | 2 | B |
3 | 3 | C |
… | … | … |
24 | 24 | X |
25 | 25 | Y |
26 | 0 | Z |
余数是 1~25,我们可以用 ‘A’+byte(a-1) 获得余数对应字母,当余数为0时,上述式子就不符合了,为了让余数为 0 时也符合上述公式,把余数赋值为 26 ,就符合上述公式了
每次求出一个字母,我们就用 append 追加在计划输出的字符串 res 的末尾
最后生成的字符串 res ,由于我们计算列名称的顺序是从右往左,因此需要将拼接后的结果反转,才是我们想取得的结果。
Go代码:
package main import "fmt" func convertToTitle(columnNumber int) string { var res []byte for columnNumber > 0 { a := columnNumber % 26 if a == 0 { a = 26 } res = append(res, 'A'+byte(a-1)) columnNumber = (columnNumber - a) / 26 } // 上面输出的res是反着的,前后交换 for i, n := 0, len(res); i < n/2; i++ { res[i], res[n-1-i] = res[n-1-i], res[i] } return string(res) } func main() { fmt.Println(convertToTitle(2147483647)) }
提交截图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。