2021-01-03 Daily-Challenge
Today is Sunday, I gonna review the tasks I've done this week, and finish today's leetcode's January LeetCoding Challenge with cpp
.
January LeetCoding Challenge 3
Description
Beautiful Arrangement
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
ith
position is divisible byi
. i
is divisible by the number at theith
position.
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
Solution
simple dfs
class Solution {
int answer;
int n;
vector<bool> used;
void dfs(int index) {
if(index == n+1) {
answer += 1;
return;
}
for(int i = 1; i <= n; ++i) {
if(!used[i] && (i % index == 0 || index % i == 0)) {
// cout << i << ' ' << index << endl;
used[i] = true;
dfs(index + 1);
used[i] = false;
}
}
}
public:
int countArrangement(int n) {
this->n = n;
answer = 0;
used.resize(n+1);
dfs(1);
return answer;
}
};