【发布时间】:2016-08-25 06:52:11
【问题描述】:
给定一个字符序列,按字母顺序返回下一个。
Example: given 'A' it should return 'B', 'Z' -> 'AA', 'ZYZ' -> 'ZZA'等
我找到了一个使用模数和数学的相关参考is in c#。 我没有将其转换为 python,而是提出了自己的解决方案。
什么是比下面的更有效的算法方法?
import string
def increment_excel(s=''):
"""
A->B, Z->AA, AZ->BA, KZZ->LAA
"""
def wrapped(s):
if not s:
return string.uppercase[0]
ind = string.uppercase.index(s[-1])
if ind < len(string.uppercase) - 1:
return s[:-1] + string.uppercase[ind + 1]
return wrapped(s[:-1]) + string.uppercase[0]
return wrapped(s.upper().replace(' ',''))
increment_excel('TRYME') # -> 'TRYMF'
increment_excel('TRY ZZ') # -> 'TRZAA'
increment_excel('ABCC') # -> 'ABCD'
increment_excel('ZZ Z') # -> 'AAAA'
【问题讨论】:
-
简单的通用解决方案是那些在base-26中的...转换为base-10,然后添加1...再次转换为base-26...
-
@lokesh1729 这种方法有一个小问题。哪个字母对应零?
-
是的,当数字可以被零整除时,我们必须小心...然后我们必须将余数作为 26 并且商 = 商-1...比如说 52.. 52/26=2 ,所以 q=1,rem=26 给出 AZ
-
为什么
Z后跟AA和ZZ也跟AA? -
ZZ -> AAA我这边的解释器