LeetCode 算法题 - Excel Sheet Column Number(Java 实现)
这是悦乐书的第 182 次更新, 第 184 篇原创
01 看题和准备
今天介绍的是 LeetCode 算法题中 Easy 级别的第 41 题 (顺位题号是 171). 给定 Excel 工作表中显示的列标题, 返回其对应的列号. 例如:A->1
B->2
C->3
Z->26
AA->27
AB->28
输入:"A"
输出: 1
输入:"AB"
产量: 28
输入:"ZY"
输出: 701
本次解题使用的开发工具是 eclipse,jdk 使用的版本是 1.8, 环境是 win7 64 位系统, 使用 Java 语言编写和测试.
02 第一种解法
这和前天的题目根据数字输出字符串列名类似, 不过今天这道题是反过来的, 根据列名字符串输出代表的数字.
既然是反过来, 那么此处就应该是要用乘法了, 并且我们也可以观察几组数据得到大致的算法.
"AA" 表示数字 28, 可以看做 26x1+1
"AAA" 表示数字 703, 可以看做 26x(26+1)+1
"AAAA" 表示数字 18279, 可以看做 26x(26x(26+1)+1)+1
每次循环时, 新的 sum 等于上一次循环的 sum 乘以 26 加上当前循环字符所表示的数字.
特殊情况: 当字符串为空或者去掉空格后的长度等于 0 时, 直接返回 0.publicinttitleToNumber(Strings){
intsum=0;
if(s.isEmpty()||s.trim().length()==0){
return0;
}
intlen=s.length()-1;
for(inti=0;i<=len;i++){
sum=(s.charAt(i)-'A'+1)+sum*26;
}
returnsum;
}
03 第二种解法
我们同样以上面的三个字符串举例.
"AA" 表示数字 28, 可以看做 1 乘以 26 的一次方加上 1 乘以 26 的 0 次方.
"AAA" 表示数字 703, 可以看做 1 乘以 26 的 2 次方加上 1 乘以 26 的 1 次方再加上 1 乘以 26 的 0 次方.
"AAAA" 表示数字 18279, 可以看做 1 乘以 26 的 3 次方加上 1 乘以 26 的 2 次方再加上 1 乘以 26 的 1 次方再加上 1 乘以 26 的 0 次方.
这种就类似二进制数转十进制数一样, 变成了 26 进制数转十进制数.
特殊情况: 当字符串为空或者去掉空格后的长度等于 0 时, 直接返回 0.publicinttitleToNumber2(Strings){
intres=0;
if(s.isEmpty()||s.trim().length()==0){
return0;
}
intcol=s.length()-1;
for(inti=0;i
res+=(s.charAt(i)-64)*Math.pow(26,col--);
}
returnres;
}
Math.pow(x,y) 方法可返回 x 的 y 次幂的值.
04 小结
算法专题目前已连续日更超过一个月, 算法题文章 41 + 篇, 公众号对话框回复 [数据结构与算法] ,[算法] ,[数据结构] 中的任一关键词, 获取系列文章合集.
以上就是全部内容, 如果大家有什么好的解法思路, 建议或者其他问题, 可以下方留言交流, 点赞, 留言, 转发就是对我最大的回报和支持!
来源: http://www.bubuko.com/infodetail-2859938.html