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]

 

posted @ 2020-05-23 00:49  JmingS  阅读(168)  评论(0编辑  收藏  举报