LeetCode171-Excel表列序号(进制转换问题)
LeetCode171-Excel表列序号
1、问题描述
给你一个字符串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 <= columnTitle.length <= 7
columnTitle
仅由大写英文组成columnTitle
在范围["A", "FXSHRXW"]
内
2、解题思路:进制转换
这个我们可以仿照十进制中的进制转换方法,通常我们在从高位向低位处理的时候,起始设置nums=0,然后每次使用当前位的数值更新nums,更新的公式为 n u m s = n u m s ∗ 10 + v nums=nums*10+v nums=nums∗10+v,这个v就是当前位的数字。
本题只需要将10进位换成26即可(A-Z有26个字母),即更新公式为 n u m s = n u m s ∗ 26 + v nums=nums*26+v nums=nums∗26+v
假设我们给的输入为columnTitle='ZY'
,首先Z和Y对应的索引分别为26和25(从1开始,这道题没有0对应的字母),那么我们的计算公式如下:
n
u
m
s
=
0
n
u
m
s
=
n
u
m
s
∗
26
+
26
=
0
∗
26
+
26
=
26
n
u
m
s
=
n
u
m
s
∗
26
+
25
=
26
∗
26
+
25
=
701
nums=0 \\ nums=nums*26+26=0*26+26=26 \\ nums=nums*26+25=26*26+25=701
nums=0nums=nums∗26+26=0∗26+26=26nums=nums∗26+25=26∗26+25=701
3、代码实现
由于本题没有0,所以代码中在减去’A’之后要+1.
package leetcode1;
/**
* Excel表列序号
*/
public class LeetCode171 {
/**
* 进制转换,
* 通用规则如下,ans=0,ans=ans*进制+vali
* 这里为ans=ans*26+vali,但是由于没有0,所以减去'A'之后要+1
*/
public static int titleToNumber(String columnTitle) {
int ans=0;
for (int i = 0; i <columnTitle.length(); i++) {
int num = columnTitle.charAt(i) - 'A' + 1;
ans=ans*26+num;
}
return ans;
}
public static void main(String[] args) {
System.out.println(titleToNumber("ZY"));
System.out.println(titleToNumber("FXSHRXW"));
System.out.println(titleToNumber("AZY"));
}
}
测试结果如下:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2022-02-19 SpringSecurity配置权限:限制访问