文章
10
粉丝
66
获赞
3
访问
45.3k
搜索出所有全排列的组合
判断相邻数之和是否为平方数的限制,来剪枝。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int res=0;
vector<int> tmp;
vector<int> vis;
bool isPingFang(int num){
int sq=(int)(sqrt(num)+0.5);
return sq*sq==num;
}
void dfs(vector<int>& nums){
if(nums.size()==tmp.size()){
res++;
return;
}
for(int i=0; i<nums.size();i++){
if(vis[i]||(i>0&&nums[i]==nums[i-1]&&!vis[i-1])||(tmp.size()>0&&!isPingFang(tmp.back()+nums[i])))continue;
vis[i]=1;
tmp.emplace_back(nums[i]);
dfs(nums);
vis[i]=0;
tmp.pop_back();
}
}
int numSquarefulPerms(vector<int>& nums) {
vis.resize(nums.size());
sort(nums.begin(), nums.end());
dfs(nums);
return res;
}
};
int mai...
登录后发布评论
continue条件里,去重是怎么判断的呀