算法面试——ACM输入输出总结(Python)

单行输入

1. 单个输入

# 输入为: 1 
a = int(input()) # 单个转换
# a = 1

2. 列表数组输入,转为数字列表

# 输入为: 1 2 3 4 5
a = input()
# a = '1 2 3 4 5'

b = [int(i) for i in input().split()] # 当然可以一步倒位
# 使用列表进行批量转换 b = [1, 2, 3, 4, 5]

# 使用map进行并行转换
e = map(int, input().split()) # 此时e是一个map迭代器,不能赋值,也不能索引
f = list(e) # 转换为列表,e = [1, 2, 3, 4, 5]
g = list(map(int, input().split())) # 一步到位

多行输入

1. 多行输入,同时未指定用例的个数

"""
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
如输入
1 5
10 20
"""
while True:
	try:
	  data = input()
	  fun(data) # 目标函数
	except:
	  break

2. 多行输入, 指定用例个数

"""
输入第一行包括一个数据组数t(1 <= t <= 100)  
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
如输入
2
1 5
10 20
"""
n = int(input()) 获取用例个数
for _ in range(n):
	data = input()
	fun(data) # 核心函数

3. 多行输入,指定某个条件退出


"""
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
如输入
1 5
10 20
0 0
"""
while True:
	data = input()
	if judge(data): # 判断是不是0
	  break
	fun(data)

链表输入输出

# 定义链表结构
class ListNode:
    def __init__(self,val,next=None):
        self.val = val
        self.next = next

# 数组转链表
def nums2ListNode(nums):
    dummy = ListNode(None)
    root = ListNode(nums[0])
    dummy.next = root
    i = 1
    while i < len(nums):
        node = ListNode(nums[i])
        root.next = node
        root = root.next
        i += 1
	root.next = None
    return dummy.next

# 打印链表
nums = [1,2,3,4,5]
root = nums2ListNode(nums)
while root:
    print(root.val)
    root = root.next

二叉树的输入输出

4.1 完全二叉树格式输入

# 中序遍历
def inorder_traversal(nums, index):
    if index >= len(nums) or nums[index] == -1:
        return
    left, right = 2 * index + 1, 2 * index + 2
    inorder_traversal(nums, left)
    print(nums[index], end = ' ')
    inorder_traversal(nums, right)

# 输入为 1 2 3 null 4 null 5
#      1
#    /   \
#   2     3
#    \     \
#     4     5
if __name__ == "__main__":
    nums = input().split()
    nums = [int(num) if num != 'null' else -1 for num in nums]
    inorder_traversal(nums, 0)

    # output: 2 4 1 3 5
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值