leetcode 932. 漂亮数组
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]