一、
class Solution:
def beautifulArray(self, N: int) -> List[int]:
result = [1]
while len(result) < N:
result = [i*2 - 1 for i in result] + [i*2 for i in result]
return [i for i in result if i<=N]
#这个算法是我个人比较喜欢的
也比较容易看懂,核心思想就是,左边放奇数,右边放偶数
而且每次循环,问题的规模扩大一倍
(分治算法的思想是把规模为N的问题,逐步拆解为更小规模的问题,然后用递归的思想去求解)
但是写程序时,思维是反过来的,你得写小规模问题的求解,然后用循环去把他变成能够解决大规模问题的程序
2、Leetcode官方解答
我个人觉得官方解答比较难懂,但是官方解答也是正宗运用了分治思想、递归思想,确实是一个好算法。
我在理解时,画了图来帮助理解,仅供大家参考
def f(N):
results = {1:[1]}
if N not in results:
odds = f((N+1)/2)
even = f(N/2)
results[N] = [2*i-1 for i in odds] + [2*i for i in even]
return results[N]