文章
11
粉丝
27
获赞
19
访问
1.3k
//895-正方形数组的数目
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
// 判断一个数是否是完全平方数
bool isPerfectSquare(int num) {
if (num < 0) return false;
int sqrtNum = sqrt(num);
return sqrtNum * sqrtNum == num;
}
//重点是如何理解回溯函数,如何将n!种情况都考虑到的,每选完一个位置就递归调用backtrack,继续寻找下一个位置的合适人选,而每一次筛选都会从头再次筛人
// 回溯函数,用于生成所有满足条件的排列
void backtrack(vector<int>& nums, vector<bool>& used, vector<int>& path, int& count) {
// 如果当前路径的长度等于数组长度,说明找到一个有效的排列
if (path.size() == nums.size()) {
count++;
return;
}
for (int i = 0; i < nums.size(); i++) {
// 如果当前元素已经被使用过,跳过
if (used[i]) continue;
// 如果当前元素与前一个元素的和不是完全平方数,跳过
if (!path.empty() && !isPerfectSquare(path.back() + nums[i])) continue;
// 避免重复排列:如果当前元素与前一个元素相同,并且前一个元素未被使用,跳过
if (i > 0 && nums[i] == nums[i - 1] ...
登录后发布评论
暂无评论,来抢沙发