优美的排列--回溯解决
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优美的排列--回溯解决相关的知识,希望对你有一定的参考价值。
题目
提交代码
class Solution {
public:
int countArrangement(int n) {
unsigned int check = 0;
//两层循环预处理,得到每个位置保持优美的可取数字(i为数字所在位置序号,j为所选数字)
vector<vector<int> >select(n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i%j==0||j%i==0){
select[i-1].emplace_back(j);
}
}
}
int cnt = 0;
function<void(int)>backtrack = [&](int pos){
if(pos>=n){
cnt++;
return;
}
for(auto&&t:select[pos]){
if(check&(1<<t))
continue;
check = check|(1<<t);
backtrack(pos+1);
check = ~((~check)|(1<<t));
}
};
backtrack(0);
return cnt;
}
};
以上是关于优美的排列--回溯解决的主要内容,如果未能解决你的问题,请参考以下文章