0526. Beautiful Arrangement (M)
Beautiful Arrangement (M)
题目
Suppose you have n integers from 1 to n. We define a beautiful arrangement as an array that is constructed by these n numbers successfully if one of the following is true for the ith position (1 <= i <= n) in this array:
- The number at the
ithposition is divisible byi. iis divisible by the number at theithposition.
Given an integer n, return the number of the beautiful arrangements that you can construct.
Example 1:
Input: n = 2
Output: 2
Explanation:
The first beautiful arrangement is [1, 2]:
Number at the 1st position (i=1) is 1, and 1 is divisible by i (i=1).
Number at the 2nd position (i=2) is 2, and 2 is divisible by i (i=2).
The second beautiful arrangement is [2, 1]:
Number at the 1st position (i=1) is 2, and 2 is divisible by i (i=1).
Number at the 2nd position (i=2) is 1, and i (i=2) is divisible by 1.
Example 2:
Input: n = 1
Output: 1
Constraints:
1 <= n <= 15
题意
对1-n这n个数进行排列,使得对于序列中第i个数字x满足i是x的倍数或者x是i的倍数。
思路
回溯法,对1-n每个位置挑选一个满足的数字放上去,判断最终得到的序列是否有效。
代码实现
Java
class Solution {
public int countArrangement(int n) {
return dfs(1, n, new boolean[n + 1]);
}
private int dfs(int index, int n, boolean[] used) {
if (index == n + 1) {
return 1;
}
int count = 0;
for (int i = 1; i <= n; i++) {
if (!used[i] && (index % i == 0 || i % index == 0)) {
used[i] = true;
count += dfs(index + 1, n, used);
used[i] = false;
}
}
return count;
}
}

浙公网安备 33010602011771号