Number of Squareful Arrays LeetCode solution in C++
1class Solution {2public:3int numSquarefulPerms(vector<int> &nums) {4sort(nums.begin(), nums.end());5int ans = 0;6solve(nums, 0, ans);7return ans;8}9void solve(vector<int> nums, int idx, int &ans) {10if (idx >= nums.size()) {11++ans;12}13for (int i = idx; i < nums.size(); i++) {14if (i > idx && nums[i] == nums[idx]) continue;15swap(nums[i], nums[idx]);16if (idx == 0 || (idx > 0 && isSquare(nums[idx] + nums[idx - 1]))) solve(nums, idx + 1, ans);17}18}19bool isSquare(int n) {20int temp = sqrt(n);21return temp * temp == n;22}23};