Skip to main content
  1. Posts/

LeetCode-LCP 23 魔术排列

·1 min·

LeetCode-LCP 23 魔术排列 #

Solution 1 #

偶数位排在前面的排列为 $nums2$, 只有 $target$ 和 $nums2$ 相同前缀的长度为可能的 $k$, 模拟验证.

代码如下:

class Solution:
    def isMagic(self, target: List[int]) -> bool:
        def shuffle(k, nums):
            res = [x for i, x in enumerate(nums) if i & 1] + [x for i, x in enumerate(nums) if not i & 1]
            return res[:k] + shuffle(k, res[k:]) if len(res) > k else res

        n = len(target)
        nums1 = [i + 1 for i in range(n)]
        nums2 = [x for i, x in enumerate(nums1) if i & 1] + [x for i, x in enumerate(nums1) if not i & 1]

        for i in range(n):
            if target[i] != nums2[i]:
                if i == 0:
                    return False
                return shuffle(i, nums1) == target
        return True