两数相加
优快云“每日一练”(Python)题目
练习题目
我的想法
看到题目是逆序,我想用堆栈原理来解题:
逆序存储在链表的数字,可以看作是从个位数字依次入了栈,只需出栈还原即可求和(用list.pop()定义一个出栈函数,对数字进行还原)。
求和后要对数字进行入栈操作,才可以输出题目要求的逆序存储的链表。把和数字转成字符串,处理相对轻松些。😃有两个方式:
①可以倒序读取和数字的字符,依次list.append()追加到输出列表,个位数字就排到前头,实现题目要求。
for i in range(len(sum_s)-1, -1, -1): #入栈
(sum_list.append(int(sum_s[i])) #倒序添加和数字字符串。
②正序读取和数字的字符,从链表头依次list.insert(0, s)插入和的数字,高位就被“挤”到了右边,实现了逆序链表输出两数和。
for i in sum_s: #入栈。这两行代码与前面被注释掉的两行代码同效,但代码更易理解。
sum_list.insert(0, int(i)) #在列表头插入。
相较之下,后者代码更清晰明了,可读性更强一些。
代码运行效果
python完整代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
# coding: utf-8
'''两数相加'''
input_list = ([2, 4, 3], [5, 6, 4]), ([0], [0]), ([9, 9, 9, 9, 9, 9, 9], [9, 9, 9, 9])
def out_stacks(lis): #出栈函数:把数字列表还原成数字。
lis2 = []
for i in lis[:]:
lis2.append(str(lis.pop()))
return int(''.join(lis2))
def sum_out(lis, lis2): #计算并输出两数和入栈列表。
sum_s = str(out_stacks(lis) + out_stacks(lis2))
sum_list = []
#for i in range(len(sum_s)-1, -1, -1): #入栈
#sum_list.append(int(sum_s[i])) #倒序添加和数字字符串。
for i in sum_s: #入栈。这两行代码与前面被注释掉的两行代码同效,但代码更易理解。
sum_list.insert(0, int(i)) #在列表头插入。
return sum_list
for x, y in input_list: #依次输出三组列表结果。
input(f'\n\n输入:\nlist1:{x},list2:{y}\n{"":.^42}\n\n输出:{sum_out(x, y)}\n\n{"The End":.^42}\n')
我的博文推荐:
- 排序数组中查找元素的重复起止位置(当前阅读1194)
- 柱状图中最大矩形(当前阅读1595)
- 电话拨号键盘的字母组合(当前阅读1205)
- 密码强度检测器(当前阅读1662)
- 求列表平衡点(当前阅读1694)
- 字符串统计(当前阅读1603)
- 尼姆游戏代码优化版(当前阅读815)
- 尼姆游戏(聪明版首发)(当前阅读3230)
推荐条件
点阅破千
参考文章:
上一篇: 输出字符串的前10个不同字符
下一篇: 练习:旋转链表(list.insert(0, list.pop())实现)

精品文章:
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室