写在前面
今天我们继续来解算法题,一看题目就很熟悉,前两天刚做了《Excel表列名称》,是通过数值,最后要转成字母名称。
今天的这道题,是要通过字母串转成相应的数值。
有些不一样,一起来看一下吧。
题目解读
要解答当前题,首先要看一下《Excel表列名称》:这道题是通过数值来转换成序号名称,原理上是利用了进制之间的转换方式。
那么我们当前这道题要如何解决呢?
自然是要通过反向操作来解决这个问题了。
我的思路大概是这样,大家可以自行参考一下。
首先是要将每一个字符转换成数值,当然了要从最后一位字符开始算起。
然后将转换后的字符进行相加,然后利用一个中间值来衡量每一位所要乘上的倍数,比如11这个数值,是一个十进制的数值。
在个位时,是1,倍数也是1;在十位时,也是1,倍数变为了10。
在本道题上来说,也是一样的,我们要将倍数当成中间值保存下来才行。
有了这些思路,我们就可以把具体的代码写出来了。
代码实现
代码如下所示,很简洁,并不复杂;大家一看就能明白了,有问题可以随时评论区。
class Solution { public int titleToNumber(String columnTitle) { int n = 0; int z = 1; for (int i = columnTitle.length() - 1; i >= 0; i--) { int k = columnTitle.charAt(i) - 'A' + 1; n += k * z; z *= 26; } return n; } }
执行结果:
其他思路
这个我也没有什么其他思路了,主要还是进制的相互转换。
总结
今天这道题,主要是考察进制规则如何相互进行转换,大家学会了吗?