前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解精选 TOP 面试题 006 | 进制转换

图解精选 TOP 面试题 006 | 进制转换

作者头像
江不知
发布2020-01-02 12:00:58
3740
发布2020-01-02 12:00:58
举报
文章被收录于专栏:编程拯救世界编程拯救世界

该系列题目取自 LeetCode 精选 TOP 面试题列表:https://leetcode-cn.com/problemset/top/

题目描述

LeetCode 171. Excel 表列序号:https://leetcode-cn.com/problems/excel-sheet-column-number/

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

例如,

代码语言:javascript
复制
    A -> 1
    B -> 2
    C -> 3
    ...
    Z -> 26
    AA -> 27
    AB -> 28
    ...

示例 1:

代码语言:javascript
复制
输入: "A"
输出: 1

示例 2:

代码语言:javascript
复制
输入: "AB"
输出: 28

示例 3:

代码语言:javascript
复制
输入: "ZY"
输出: 701

解题思路

通过观察可知,这道题的本质其实是 26 进制转 10 进制的计算。

A~Z 共 26 个字母,各字母对应数字关系如下:

与其他进制转 10 进制的计算方式相同。我们假设 n 位上的数字为 ,那么该位置所产生的 10 进制数值为:

最终的 10 进制结果即为各个位上所产生的数值之和。

以题目中给出的 "ZY" 为例:

具体实现

Python

代码语言:javascript
复制
class Solution:
    def titleToNumber(self, s: str) -> int:
        res = 0

        ans = 1

        for word in s[::-1]:
            res += ans * (ord(word) - ord('A') + 1)
            ans *= 26

        return res

Go

代码语言:javascript
复制
func titleToNumber(s string) int {
    res := 0
    length := len(s)
    ans := 1
    for i := 0; i < length; i++ {
        index := length - i - 1
        res += ans * (int(s[index]) - int('A') + 1)
        ans *= 26
    }
    return res
}

复杂度

  • 时间复杂度:
  • 空间复杂度:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拯救世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解题思路
  • 具体实现
    • Python
      • Go
      • 复杂度
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档