LeetCode 996 正方形数组的数目
给定一个数组,将数组内数字重新排序,使得相邻的两个数字之和为完全平方数,求有多少种排列方法。如果两种方法每一位上的数字都相同,则视为一种。本题我的思路就是首先把每个数字看作节点,如果两个数字的和是完全平方数就可以连一条边,然后就可以开始回溯。在回溯的过程中,在当前状态下,如果选择的数字之前选择过,则不需要再选择,具体见代码。(第一次在力扣上写题解)
class Solution {
public:
int vis[15],ans;//vis[i]表示第i个数字是否已经使用过
int equ[13][13];//equ[i][j]=1表示第i个数和第j个数相等
vector G[13];//记录图中各节点的连接
//now表示当前选择第now个节点,x表示当前节点是原数组的第x个数,end是数组大小
void dfs(int now,int x,int end)
{
//记录当前选择的数字在之前是否使用过,如果使用过就可视为相同的情况,直接跳过。
int trys[12]={0};
//当前的数组顺序符合条件,答案加一
if(now==end-1)
{
ans++;
return ;
}
//每次选择一个节点去进行回溯,第一个节点的选择没有限制
if(now==-1){
for(int i=0;i& A) {
int sz=A.size();
int sum,t;
for(int i=0;i