[编程 | 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))
浙公网安备 33010602011771号