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+a1261+a2262+a3263+...+an126n1
这和26进制特别像,但需要注意的是 1 < = a 0 , a 1 , . . . , a n − 1 < = 26 1<=a_0,a1,...,a_{n-1}<=26 1<=a0,a1,...,an1<=26,而26进制则要求
0 < = a 0 , a 1 , . . . , a n − 1 < = 25 0<=a_0,a1,...,a_{n-1}<=25 0<=a0,a1,...,an1<=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} num1=a01+a1261+a2262+a3263+...+an126n1
那么
n u m − 1   m o d   26 = a 0 − 1 num-1 \ mod \ 26=a_0-1 num1 mod 26=a01
接下来,另 n u m 1 = ( n u m − a 0 ) / 26 num1=(num-a_0)/26 num1=(numa0)/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} num11=a1+a2261+a3262+...+an126n2
那么
n u m 1 − 1   m o d   26 = a 1 − 1 num1-1 \ mod \ 26=a_1-1 num11 mod 26=a11
以此类推,便可得到结果。

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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值