算法编程(十三):Excel 表列序号

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

写在前面

今天我们继续来解算法题,一看题目就很熟悉,前两天刚做了《Excel表列名称》,是通过数值,最后要转成字母名称。

今天的这道题,是要通过字母串转成相应的数值。

有些不一样,一起来看一下吧。

image.png

题目解读

要解答当前题,首先要看一下《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; 
    }
}

执行结果:

image.png

其他思路

这个我也没有什么其他思路了,主要还是进制的相互转换。

总结

今天这道题,主要是考察进制规则如何相互进行转换,大家学会了吗?