1 """
2 思路:
3 1、如何满足漂亮数组?
4 奇数 + 偶数 = 奇数 =》将数组,拆分为两部分:奇数漂亮数组 + 偶数漂亮数组
5
6 2、如何获取 奇数漂亮数组 和 偶数漂亮数组?
7 举例:求N=7的漂亮数组
8 获取奇数数组:1 3 5 7 偶数数组:2 4 6
9
10 由于:
11 如果一个数组是漂亮数组,则对该数组所有元素进行 【乘以同一个值】或者【加/减 同一个值】,则获得的数组仍为漂亮数组
12 故:
13 求 1 3 5 7 的漂亮数组 《=》 求 1 2 3 4 的漂亮数组,在对数组元素进行 2x-1,即可
14 求 2 4 6 的漂亮数组 《=》 求 1 2 3 的漂亮数组,再对数组元素进行 2x,即可
15
16 综上,求 “N=7的漂亮数组”,转换为了 “求N=4的漂亮数组” 和 “求N=3的漂亮数组”。
17
18 分治 递归 可解该题。
19 """
20
21 class Solution:
22 def __init__(self):
23 self.n_to_ans = None
24
25 def beautifulArray(self, N: int) -> List[int]:
26 self.n_to_ans = {1: [1]}
27 self.solve(N)
28 return self.n_to_ans[N]
29
30 def solve(self, n):
31 if n not in self.n_to_ans:
32 odd_ls = self.solve((n+1)//2)
33 even_ls = self.solve(n//2)
34 self.n_to_ans[n] = [(2*i-1) for i in odd_ls] + [(2*i) for i in even_ls]
35 return self.n_to_ans[n]