Python3如何在循环中实现字符串逐位加1的类里程表功能
实现思路
- 逻辑和十进制加法的进位规则完全一致,只是基数从10替换为26(对应a-z共26个小写字母),从字符串最后一位开始向前处理即可
- 先把字符串转为可修改的数组,初始进位值设为1(对应加1操作)
- 从后向前遍历数组每一位:
- 如果当前没有未处理的进位,直接终止遍历
- 将当前字符转为0-25的数值(a对应0,z对应25),加上进位值
- 相加后等于26的话,当前位设为a,进位保持1;否则当前位转成对应字母,进位设为0
- 遍历结束后如果还有未处理的进位,说明原字符串所有位都是z,需要在数组头部新增一个a
- 最后把数组拼接回字符串即可
代码示例
JavaScript 实现
function incrementString(str) { const arr = str.split(''); let carry = 1; for (let i = arr.length - 1; i >= 0 && carry; i--) { const charCode = arr[i].charCodeAt(0) - 'a'.charCodeAt(0); const newCode = charCode + carry; if (newCode === 26) { arr[i] = 'a'; carry = 1; } else { arr[i] = String.fromCharCode(newCode + 'a'.charCodeAt(0)); carry = 0; } } if (carry) arr.unshift('a'); return arr.join(''); }
Python 实现
def increment_string(s: str) -> str: arr = list(s) carry = 1 for i in range(len(arr)-1, -1, -1): if not carry: break char_num = ord(arr[i]) - ord('a') new_num = char_num + carry if new_num == 26: arr[i] = 'a' carry = 1 else: arr[i] = chr(new_num + ord('a')) carry = 0 if carry: arr.insert(0, 'a') return ''.join(arr)
测试验证结果:
incrementString("aaaaa") → "aaaab"
incrementString("aaaaz") → "aaaba"
incrementString("kbzzz") → "kcaaa"
incrementString("zzz") → "aaaa"
内容的提问来源于stack exchange,提问作者mj99
相关产品推荐
相关产品推荐

