【leetcode】Excel表列名称

Solution 1: 从1开始的26进制

class Solution(object):
    def convertToTitle(self, columnNumber):
        """
        :type columnNumber: int
        :rtype: str
        """
        columnNumber = columnNumber - 1
        columnName = []
        while columnNumber//26 != 0:
            columnName.append(chr(columnNumber%26 + 65))
            columnNumber = (columnNumber - columnNumber%26)/26 - 1
        columnName.append(chr(columnNumber%26 + 65))

        return ''.join(columnName[::-1])

说明:一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在[0,x)」的前提下进行。但本题需要我们将从1开始,因此在执行「进制转换」操作前,我们需要先对 columnNumber 执行减一操作,从而实现整体偏移。

Solution 2: 另一种写法

class Solution(object):
    def convertToTitle(self, columnNumber):
        """
        :type columnNumber: int
        :rtype: str
        """

        ## Solution 1
        char_dict = {(i-64): chr(i) for i in range(65, 90)}
        char_dict[0] = 'Z'
        # print(char_dict)
        num = columnNumber
        columnName = []
        while num//26 != 0:
            # print('...')
            # print(num//26)
            n = num%26
            # print(n)
            columnName.append(char_dict[n])
            if n==0:
                n = 26
            num = (num - n)/26
            # print(num, columnName)
            
        n = num%26
        if n!=0:
            columnName.append(char_dict[num%26])
        return ''.join(columnName[::-1])
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值