LeetCode 每日一题 168. Excel Sheet Column Title(数学)

题链:https://leetcode-cn.com/problems/excel-sheet-column-title/
内容:将数字变为Excel表格字母的方式。

先考虑字母转数字
n u m = a 0 + a 1 ∗ 2 6 1 + a 2 ∗ 2 6 2 + a 3 ∗ 2 6 3 + . . . + a n − 1 ∗ 2 6 n − 1 num=a_0+a_1*26^1 + a_2*26^2+a_3*26^3+...+a_n-1*26^{n-1} num=a0​+a1​∗261+a2​∗262+a3​∗263+...+an​−1∗26n−1
这和26进制特别像,但需要注意的是 1 < = a 0 , a 1 , . . . , a n − 1 < = 26 1<=a_0,a1,...,a_{n-1}<=26 1<=a0​,a1,...,an−1​<=26,而26进制则要求
0 < = a 0 , a 1 , . . . , a n − 1 < = 25 0<=a_0,a1,...,a_{n-1}<=25 0<=a0​,a1,...,an−1​<=25

思路一

公式变换:
n u m − 1 = a 0 − 1 + a 1 ∗ 2 6 1 + a 2 ∗ 2 6 2 + a 3 ∗ 2 6 3 + . . . + a n − 1 ∗ 2 6 n − 1 num-1=a_0-1+a_1*26^1 + a_2*26^2+a_3*26^3+...+ \\ a_n-1*26^{n-1} num−1=a0​−1+a1​∗261+a2​∗262+a3​∗263+...+an​−1∗26n−1
那么
n u m − 1   m o d   26 = a 0 − 1 num-1 \ mod \ 26=a_0-1 num−1 mod 26=a0​−1
接下来,另 n u m 1 = ( n u m − a 0 ) / 26 num1=(num-a_0)/26 num1=(num−a0​)/26,则
n u m 1 − 1 = a 1 + a 2 ∗ 2 6 1 + a 3 ∗ 2 6 2 + . . . + a n − 1 ∗ 2 6 n − 2 num1-1=a_1 + a_2*26^1+a_3*26^2+...+ a_{n-1}*26^{n-2} num1−1=a1​+a2​∗261+a3​∗262+...+an−1​∗26n−2
那么
n u m 1 − 1   m o d   26 = a 1 − 1 num1-1 \ mod \ 26=a_1-1 num1−1 mod 26=a1​−1
以此类推,便可得到结果。

class Solution {
public:
    string convertToTitle(int columnNumber) {
        string ans = "";
        while (columnNumber > 0) {
            int x = (columnNumber - 1) % 26;
            ans += x+1-1 + 'A';
            columnNumber = (columnNumber - x) / 26;
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

思路二

之前说到了,与26进制不同的仅仅是系数多了1,那我们只需在常规求26进制的时候提前减1即可。

class Solution {
public:
    string convertToTitle(int columnNumber) {
        string ans;
        while (columnNumber--) {
            int a0 = columnNumber % 26 ;
            ans += a0 + 'A';
            columnNumber /= 26;
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};
上一篇:Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]&quo


下一篇:Caused by: org.xml.sax.SAXParseException; lineNumber: 29; columnNumber: 107; 对实体 "characterEnco