1. 问题描述:
2. 思路分析:
3. 代码如下:
from typing import List
class Solution:
# 判断当前的a1推导出的其余ai是否是一个排列
def check(self, a1: int, n: int, b: List[int]):
# st用来标记对应的数字是否已经被使用过了
st = [0] * (n + 10)
a = [0] * (n + 10)
a[1] = a1
st[a1] = 1
for i in range(2, n + 1):
# 推导出其余的ai
a[i] = b[i - 1] - a[i - 1]
# 越界了
if a[i] < 0 or a[i] > n: return False
# 存在重复
if st[a[i]]: return False
st[a[i]] = 1
# 输出排列
for i in range(1, n + 1):
print(a[i], end=" ")
return True
# 枚举 + 推公式
def process(self):
n = int(input())
# b的前面加上一个0这样下标可以从1开始
b = [0] + list(map(int, input().split()))
for i in range(1, n + 1):
if self.check(i, n, b):
break
if __name__ == "__main__":
Solution().process()