LeetCode-LCP 23 魔术排列
Table of Contents
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