[算法导论] 1≤n≤15,n个整数组成的数组,输出所有不重复且满足条件的排列组合
- 数组 `arr` 是 `1..n` 的一个排列。
- 位置 `i` 从 **1** 开始计数(不是从 0 开始)。
- 条件:`arr[i] % i == 0` 或 `i % arr[i] == 0`。
- 输出所有满足条件的排列。
---
## 思路
使用回溯法(DFS + 剪枝):
1. 从位置 1 开始填数字。
2. 对于每个位置 `i`,尝试所有还未使用的数字 `x`。
3. 检查 `x % i == 0` 或 `i % x == 0`。
4. 如果满足,则放置,递归到下一位置。
5. 当填到位置 `n+1` 时,记录一个有效排列。
---
## Python 实现
```python
def beautiful_arrangements(n):
used = [False] * (n + 1)
result = []
def backtrack(pos, current):
if pos > n:
result.append(current[:])
return