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 };

 

posted @ 2018-06-15 22:21  FlyingWarrior  阅读(464)  评论(0编辑  收藏  举报