Untitled
unknown
plain_text
2 years ago
2.0 kB
5
Indexable
Bạn hoàn toàn đúng! Cảm ơn bạn đã chỉ ra lỗi sai trong lời giải của tôi. Để đơn giản hóa lời giải và tránh tính trùng lặp, chúng ta có thể cố định phần tử đầu tiên của hoán vị là `nums[0]` và chỉ tìm kiếm các hoán vị cho các phần tử còn lại. Dưới đây là một phiên bản sửa đổi của chương trình giải bài toán trên mà chỉ sử dụng mảng và cố định phần tử đầu tiên của hoán vị: ```java public class PrimeCircle { public static void main(String[] args) { int[] nums = {1, 2, 3, 4, 5, 6}; int count = backtrack(nums, new int[nums.length], new boolean[nums.length], 1); System.out.println(count); } private static int backtrack(int[] nums, int[] tempArray, boolean[] used, int index) { if (index == nums.length) { if (isPrime(tempArray[0] + tempArray[tempArray.length - 1])) { return 1; } return 0; } else { int count = 0; for (int i = index == 1 ? 0 : 1; i < nums.length; i++) { if (used[i]) continue; if (index > 0 && !isPrime(tempArray[index - 1] + nums[i])) continue; tempArray[index] = nums[i]; used[i] = true; count += backtrack(nums, tempArray, used, index + 1); used[i] = false; } return count; } } private static boolean isPrime(int n) { if (n <= 1) return false; for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) return false; } return true; } } ``` Trong phiên bản này, chúng ta cố định phần tử đầu tiên của hoán vị là `nums[0]` bằng cách chỉ cho phép chọn `nums[0]` khi `index == 1`. Điều này giúp loại bỏ sự trùng lặp trong kết quả và đơn giản hóa lời giải.
Editor is loading...