【力扣】168.Excel表列名称|每日一题|刷题打卡

118 阅读1分钟

一、题目描述

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

例如:

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"

 

提示:

  • 1 <= columnNumber <= 231 - 1

二、思路分析

  1. 首先我们可以先定义一个 map 对象,将这些字符都映射出来
  2. 我们最先能够判断 columnNumber 小于 26 的情况
  3. 当大于26的要怎么处理呢?以 28 为例,需要得到 AB,那么我们反推
    • 如何得到 AB 呢?
    • 我们可以通过 columnNumber % 26 得到 2,这样就可以通过 map[2] --> B
    • columnNumber / 26 向下取整 得到 1, map[1] --> A
  4. 特殊情况:整除情况,例如 52 ---> AZ,我们希望得到 1 和 26, 实际得到 0 和 2,所以需要在0的时候做些处理就好了

三、代码答案

/**
 * @param {number} columnNumber
 * @return {string}
 */
var convertToTitle = function (columnNumber) {
  let map = {
    1: 'A',
    2: 'B',
    3: 'C',
    4: 'D',
    5: 'E',
    6: 'F',
    7: 'G',
    8: 'H',
    9: 'I',
    10: 'J',
    11: 'K',
    12: 'L',
    13: 'M',
    14: 'N',
    15: 'O',
    16: 'P',
    17: 'Q',
    18: 'R',
    19: 'S',
    20: 'T',
    21: 'U',
    22: 'V',
    23: 'W',
    24: 'X',
    25: 'Y',
    26: 'Z',
  }
  const arr = []
  while (columnNumber > 26) {
    let a = columnNumber % 26
    if (a === 0) {
      arr.unshift('Z')
      columnNumber--
    } else {
      arr.unshift(map[a])
    }
    columnNumber = Math.floor(columnNumber / 26)
  }
  arr.unshift(map[columnNumber])
  return arr.join('')
};