Number of Squareful Arrays LeetCode solution in Java
1class Solution {2int count;34public int numSquarefulPerms(int[] nums) {5int n = nums.length;6if (n < 2) return count;7backtrack(nums, n, 0);8return count;9}1011void backtrack(int[] nums, int n, int start) {12if (start == n) {13count++;14}15Set<Integer> set = new HashSet<>();16for (int i = start; i < n; i++) {17if (set.contains(nums[i])) continue;18swap(nums, start, i);19if (start == 0 || isPerfectSq(nums[start], nums[start - 1])) backtrack(nums, n, start + 1);20swap(nums, start, i);21set.add(nums[i]);22}23}2425void swap(int[] A, int a, int b) {26int temp = A[a];27A[a] = A[b];28A[b] = temp;29}3031boolean isPerfectSq(int a, int b) {32int x = a + b;33double sqrt = Math.sqrt(x);34return (sqrt - (int) sqrt) == 0 ? true : false;35}36}