• LeetCode 168. Excel表列名称(Excel Sheet Column Title)


    题目描述

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

    例如,

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

    示例 1:

    输入: 1
    输出: "A"
    

    示例 2:

    输入: 28
    输出: "AB"
    

    示例 3:

    输入: 701
    输出: "ZY"
    

    解题思路

    此题可看做把一个10进制的数转换成26进制的列名,但由于列名称里没有字母表示十进制的0,所以和单纯的进制转换又不太一样。考虑由最低位开始从右往左来依次求解,最低位的数字范围是1~26,分别对应列名中的A~Z。由列名X1X2XkXk+1转换成的十进制数可表示为

    X1*26k + X2*26k-1 + …… + Xk*26 + Xk+1

    可知去掉最低位的数字Xk+1后一定能被26整除,而Xk+1可以取1~26中的数,为了从要转换的数字n中分离出最后一位,所以先把n减1,这样Xk+1的取值变为0~25,让n对26取余后得到的余数即为此时Xk+1对应的数,然后再令A~Z依次匹配0~25即可。最后一位确定后,令n=(n-1)/26,这样得到结果列名依次右移一位的新列名对应的十进制数

    X1*26k-1 + X2*26k-2 + …… + Xk

    再对其递归求解,直到十进制数变为0。

    代码

     1 class Solution {
     2 public:
     3     string convertToTitle(int n) {
     4         string res = "";
     5         while(n){
     6             res = (char)('A' + (n - 1) % 26) + res;
     7             n = (n - 1) / 26;
     8         }
     9         return res;
    10     }
    11 };
  • 相关阅读:
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    常见的http response
    ==容易错误的例子
    点击panel滚动条滚动到底部
    fabric实现文本聚焦、可编辑
    JSON.parse()和JSON.stringify()的使用
    centos7安装mysql
    阿里云第一次访问tomcat非常慢的解决办法
    java中的语法糖
    jvm | 基于栈的解释器执行过程
  • 原文地址:https://www.cnblogs.com/wmx24/p/9189181.html
Copyright © 2020-2023  润新知