0
点赞
收藏
分享

微信扫一扫

1443 拍照(枚举 + 推公式)

眼君 2022-02-27 阅读 30
算法

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()
举报

相关推荐

0 条评论