[Golang]力扣Leetcode - 168. Excel表列名称(数学)
[Golang]力扣Leetcode - 168. Excel表列名称(数学)
题目:给你一个整数 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)) }
提交截图:
本文作者:Dancing-Pierre
本文链接:https://www.cnblogs.com/wyc-1009/p/17548028.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步