class Solution {
int[] ans;
boolean flag = false;
public int[] constructDistancedSequence(int n) {
ans = new int[n * 2 - 1];
int[] arr = new int[n * 2 - 1];
Arrays.fill(arr, - 1);
boolean[] visited = new boolean[n + 1];
dfs(n, 0, arr, visited);
return ans;
}
private void dfs(int n, int index, int[] arr, boolean[] visited){
if (flag){
return;
}
// 所有位置都填写好了
if (index == n * 2 - 1){
flag = true;
System.arraycopy(arr, 0, ans, 0, 2 * n - 1);
return;
}
if (arr[index] != -1){
dfs(n, index + 1, arr, visited);
return;
}
for (int i = n; i >= 1; i--){
if (visited[i]){
continue;
}
if (i == 1){
arr[index] = 1;
visited[i] = true;
dfs(n, index + 1, arr, visited);
arr[index] = -1;
visited[i] = false;
} else {
if (index + i < 2 * n - 1 && arr[index + i] == -1){
arr[index] = i;
visited[i] = true;
arr[index + i] = i;
dfs(n, index + 1, arr, visited);
arr[index] = -1;
arr[index + i] = -1;
visited[i] = false;
}
}
}
}
}
力扣:1718. 构建字典序最大的可行序列
最新推荐文章于 2024-07-25 19:34:38 发布