TGViewer
Java | LeetCode Java | LeetCode @easy_java_task · 6.44K subscribers
Post #2116 664
Задача: 996. Number of Squareful Arrays
Сложность: hard

Массив является квадратным, если сумма каждой пары соседних элементов является совершенным квадратом. Если задан целочисленный массив nums, верните количество перестановок nums, которые являются квадратными. Две перестановки perm1 и perm2 различны, если существует некоторый индекс i такой, что perm1[i] != perm2[i].

Пример:
Input: nums = [1,17,8]
Output: 2


👨‍💻 Алгоритм:

1⃣Генерация перестановок:
Сгенерируйте все возможные перестановки массива nums.
Для каждой перестановки проверьте, является ли она квадратной.

2⃣Проверка квадратности:
Для каждой перестановки проверьте, является ли сумма каждой пары соседних элементов совершенным квадратом.
Для этого используйте функцию для проверки, является ли число совершенным квадратом.

3⃣Подсчет квадратных перестановок:
Подсчитайте количество перестановок, которые являются квадратными, и верните это значение.

😎 Решение:
import java.util.*;

public class Solution {
public int numSquarefulPerms(int[] nums) {
Arrays.sort(nums);
boolean[] used = new boolean[nums.length];
Set<List<Integer>> result = new HashSet<>();
List<Integer> path = new ArrayList<>();
backtrack(nums, used, path, result);
return result.size();
}

private void backtrack(int[] nums, boolean[] used, List<Integer> path, Set<List<Integer>> result) {
if (path.size() == nums.length) {
if (isSquareful(path)) {
result.add(new ArrayList<>(path));
}
return;
}

for (int i = 0; i < nums.length; i++) {
if (used[i] || (i > 0 && nums[i] == nums[i - 1] && !used[i - 1])) continue;
path.add(nums[i]);
used[i] = true;
backtrack(nums, used, path, result);
path.remove(path.size() - 1);
used[i] = false;
}
}

private boolean isSquareful(List<Integer> perm) {
for (int i = 0; i < perm.size() - 1; i++) {
int sum = perm.get(i) + perm.get(i + 1);
int root = (int) Math.sqrt(sum);
if (root * root != sum) return false;
}
return true;
}
}


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_java_task
  1. Oct 11, 2026Задача: 672. Bulb Switcher II Сложность: medium Есть комната с n лампочками, пронумерованн…
  2. Oct 10, 2026Post #2290
  3. Oct 10, 2026Задача: 723. Candy Crush Сложность: medium Этот вопрос касается реализации базового алгори…
  4. Oct 10, 2026Post #2288
  5. Oct 9, 2026Задача: 1266. Minimum Time Visiting All Points Сложность: easy На двумерной плоскости имее…
  6. Oct 7, 2026Задача: 350. Intersection of Two Arrays II Сложность: easy Даны два целочисленных массива…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →