本文共 1266 字,大约阅读时间需要 4 分钟。
168 给定一个正整数,返回它在 Excel 表中相对应的列名称 171 给定一个Excel表格中的列名称,返回其相应的列序号
一、168 给定一个正整数,返回它在 Excel 表中相对应的列名称
【题目】
【方法一】 26进制。但是有点不一样。 拿到任意一个数,n/26看一下商和余数。 1/26 = 商0余1 A 2/26 = 商0余2 B 3/26 = 商0余3 C ... ... 25/26 = 商0余25 Y 26/26 = 商0余26 Z
27/26 = 商1余1 AA 28/26 = 商1余2 AB .... ... 51/26 = 商1余25 AY 52/26 = 商1余26 AZ ... ... 701/26 = 商26余25 ZY 702/26 = 商26余26 ZZ
我们发现: 当余数为1~25时,对应显示A~Y。 当余数为26时,显示Z。但是计算的时候如果有余数为26就会进上去。比如52/26=2余0,而不是等于1余26。 那怎么办?再要回来!当余数显示为0的时候,就让商减去1。这样我就是26了。
代码:
结果:
【方法二】 方法一中,我们可以看到: 1. 当余数不为0时,需要增加的字符是x-1+'A'。等同于先让n减1,然后再用余数+'A'。 即:当n%26 != 0时: (n%26)-1+'A' == (n--)%26 + 'A'。
2. 当余数等于0时,需要增加的字符是'Z',并且让n/26减了1。等同于先让n减1,然后余数+'A'。 即:当n%26==0时: 'Z' = (n--)%26 + 'A' 因此,可以上来先让n减1,然后除以26。余数0~25对应A~Z。商再用同样的方式转化。
举例来说: 1---->0 0/26 = 商0余0 A 2---->1 1/26 = 商0余1 B 3---->2 2/26 = 商0余2 C 4---->3 3/26 = 商0余3 D ... ... 25---->24 24/26 = 商0余24 Y 26---->25 25/26 = 商0余25 Z
27---->26 26/26 = 商1余0 AA 28---->27 27/26 = 商1余1 AB .... ... 52---->51 51/26 = 商1余25 AZ 53---->52 52/26 = 商2余0 BA ... ... 702---->701 701/26 = 商26余25 ZZ
代码:
结果:
--------------------------------------------------------------------------------------------------------------------
二、171 给定一个Excel表格中的列名称,返回其相应的列序号
【题目】
【分析】 ZY= Z*26+Y = 26*26+25 ABY = 1*26*26 + 2*26 + 25 就是26进制转成10进制。
【代码】
【结果】
|
转载地址:http://fslwn.baihongyu.com/