python求解LeetCode 习题 Excel Sheet Column Title

来源:互联网 发布:漱口水 酒精 知乎 编辑:程序博客网 时间:2024/06/06 07:12

1、题目

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

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

题目的意思就是想把类似于A、AA、AS这样的字符转化为26进制表达的数字,还要实现反转

思路:

按照正常的进制转换的做法的确是可以做出来,但是个人感觉这个题目还有别的更简单的做法,就是事先建立起来两个映射的字典,最起码可以提高效率,这也是我第一眼看到这个题目就想用的方法,事实证明的确是好使的,至于时间效率什么的倒是没有去测试,如果感兴趣的话倒是可以去试试

下面是具体实现:

#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能:实现进制转换'''map_dict={'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7,'H':8,'I':9,'J':10,'K':11,          'L':12,'M':13,'N':14,'O':15,'P':16,'Q':17,'R':18,'S':19,'T':20,'U':21,          'V':22,'W':23,'X':24,'Y':25,'Z':26}reverse_map={1:'A',2:'B',3:'C',4:'D',5:'E',6:'F',7:'G',8:'H',9:'I',10:'J',11:'K',             12:'L',13:'M',14:'N',15:'O',16:'P',17:'Q',18:'R',19:'S',20:'T',21:'U',             22:'V',23:'W',24:'X',25:'Y',26:'Z'}def excel_sheet_title_transform(str_list):    '''    输入:['A','AZ','AM','BA']    输出:对应的数字    '''    for one in str_list:        if len(one)==1:            print str(one)+'----->'+str(map_dict[one])        else:            length=len(one)            value=0            for i in range(length-1):                value+=26*map_dict[one[i]]            value+=map_dict[one[-1]]            print str(one)+'----->'+str(value)def reverse_transform(num_list):    '''    输入:[1,52,39,53]    输出:对应英文字符    '''    for one in num_list:        if one<=26:            print str(one)+'------>'+reverse_map[one]        else:            one_list=[]            temp=one            while one!=0:                mod=one%26                one_list.append(mod)                one/=26            str_list=[]            for one_num in one_list:                if one_num in map_dict.values():                    str_list.append(reverse_map[one_num])            print str(temp)+'------>'+''.join(str_list[::-1])if __name__ == '__main__':    str_list=['A','AZ','AM','BA']    num_list=[1,52,39,53]    excel_sheet_title_transform(str_list)    print '*************************reverse_transform***************************'    reverse_transform(num_list)

结果如下:

A----->1AZ----->52AM----->39BA----->53*************************reverse_transform***************************1------>A52------>B39------>AM53------>BA[Finished in 0.3s]