excel sheet column number java,LeetCode 算法题 - Excel Sheet Column Number(Java 实现)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值