[编程 | 200分] 九宫格按键输入法
【题目】
【代码】
keyboard = { 1:',.', 2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz', 0:' ' } def fun(s): result = [] mode = 1 # 1:数字 0:字母 tmpL = list(s) stack = [] def out(mode): nonlocal stack if mode: while stack: result.append(stack.pop(0)) else: lenStack = len(stack) lenMap = len(keyboard[int(stack[-1])]) result.append(keyboard[int(stack[-1])][(lenStack % lenMap) - 1]) stack = [] while tmpL or stack: if not tmpL: # 只有stack非空 out(mode) else: # 只有tmpL非空、tmpL和stack均非空 if tmpL[0] == '#': out(mode) tmpL.pop(0) mode = 0 elif tmpL[0] == '/': out(mode) tmpL.pop(0) else: if not stack or tmpL[0] == stack[-1]: # 多次相同的输入需要入栈 stack.append(tmpL.pop(0)) else: # 输入不同则需要出栈计算之前输入的内容 out(mode) return ''.join(result) if __name__ == '__main__': test = '#44882933444' print(fun(test))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?