实用算法题:excel表列序号与十进制数字的互相转化算法讲解!

简介: 实用算法题:excel表列序号与十进制数字的互相转化算法讲解!

日常生活中excel的使用大家都不陌生,可能几列的表格我们还能脑海中参照A-Z来区分对应的数字应该是几。但有的表格列过多,或者鼠标一甩到了很后面的位置,好几个字母拼起来,一时间很难反映过来对应的数字是多少列。所以今天力扣这两道算法题,就帮我们解决了这个问题。当然近半年的这两题的出题公司有:

  • 微软 6次
  • Shopee 3次
  • 苹果 2次
  • 高盛 2次

额,居然没有国内大厂?是要把excel换成WPS,才更贴切国内考点吗?哈哈....

下来,让我们逐个题目分析下解题方法吧!


171.Excel表列序号


https://leetcode-cn.com/problems/excel-sheet-column-number/solution/171excelbiao-lie-xu-hao-xiang-xi-jie-xi-4bygt/

难度:简单


题目

给定一个Excel表格中的列名称,返回其相应的列序号。 例如,

A -> 1
    B -> 2
    C -> 3
    ...
    Z -> 26
    AA -> 27
    AB -> 28 
    ...


示例

示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701


分析

关于excel列表序号,先来看这道简单的开胃菜题目,之后还有逆向的对比题目:


168.Excel表列名称


由于excel列表是A-Z的26位数字, 当数字为27时就变成了AA,那么很明确是26进制。

将这道题转化为26进制转10进制的思路后,就很简单了。由于columnTitle是字符串类型, 我们就举个关于十进制字符串求总和的例子,来套用这道题。

如何将'123'转化为十进制数?大佬们要说了int(123),如果是要说这种解题思路, 那来来来键盘给你,你来写(这里举例子10进制只是为了方便大家理解)。

  1. 首先我们需要定义初始num = 0
  2. 然后for循环每一个字符串
  3. 现将上一次计算的num * 进制数(这里为10),然后在加上当前的数字
  4. 重复3动作最终求总和后返回结果即可。

有了上面的思路,那这道题照搬模板打套路就好了。这里唯一要注意的一点是,excel中 A-Z代表1--26,是没有0的,所以当我们获取到每一位的字符串时通过

ord('string') - ord('A') + 1的公式获取结果,当然为了运行加速, 简便的方式就是 ord('A') - 1 = 65 - 1 =

64,改写为 ord('string') - 64。 算法本身就是扣细节的事情,能省则省。来看看解题:


解题

class Solution:
    def titleToNumber(self, columnTitle):
        ret = 0
        for i in columnTitle:
            ret = ret * 26 + ord(i) - 64
        return ret

有了这道题的基础,再来看下面这道逆向转换的题目,就更简单了。


168.Excel表列名称

https://leetcode-cn.com/problems/excel-sheet-column-title/solution/168excelbiao-lie-ming-cheng-excelbiao-mi-sv3v/

难度:简单


题目

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

提示:

  • 1 <= columnNumber <= 231 - 1

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...


示例

示例 1:
输入:columnNumber = 1
输出:"A"
示例 2:
输入:columnNumber = 28
输出:"AB"
示例 3:
输入:columnNumber = 701
输出:"ZY"
示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"


分析

在看这道题之前,建议大家先去阅读下它的逆向题目,看过之后更便于理解这道题。

如果excel的设计A-Z代表0-25,那么就没什么难度了,可是偏偏代表的是1-26,没有零什么事儿!

首先要明确27的excel列表名称是AA,就很明确的告诉大家这是一道10进制转26进制的题目。

唯一绕的就是,我们如何让每一位都从0开始呢?其实想想很简单,每一位的时候,

我们先将当前值减去1,再做计算不就好了嘛!

这里用到python的divmod方法,简便求出结果:

商,余数 = divmod(被除数,除数)

至于65,则是由于chr(65) = "A",既然已经知就没必要每次再转换了...


解题

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        ret = ''
        while columnNumber:
            columnNumber -= 1
            columnNumber, num = divmod(columnNumber, 26)
            ret = chr(65 + num) + ret
        return ret




相关文章
|
C++
Excel 表列序号(C++)
Excel 表列序号(C++)
105 0
|
算法
算法编程(十三):Excel 表列序号
算法编程(十三):Excel 表列序号
117 0
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
【力扣】168. Excel表列名称、171. Excel 表列序号
【力扣】168. Excel表列名称、171. Excel 表列序号
171 1
|
Java 算法 Go
Java每日一练(20230330) Excel表列序号、最大数、颜色分类
Java每日一练(20230330) Excel表列序号、最大数、颜色分类
99 0
Java每日一练(20230330) Excel表列序号、最大数、颜色分类
|
Java
|
2月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
2月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
4月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!

热门文章

最新文章