一意の整数の配列が与えられ、可能なすべての順列を生成するように求められます。 2 つの順列は、要素の順序が異なる場合、異なるものとみなされます。長さ n の配列の場合、n! 通りの置換が可能です。
解決策には 2 つの主な手順が含まれます。
このアプローチを使用すると、すべての順列を生成できます。
import java.util.ArrayList; import java.util.List; public class Permutation { public static List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new ArrayList<>(); permute(nums, 0, result); return result; } private static void permute(int[] nums, int startIndex, List<List<Integer>> result) { if (startIndex == nums.length - 1) { // Base case: If we reach the end of the array, add the current permutation to the result. List<Integer> permutation = new ArrayList<>(); for (int num : nums) { permutation.add(num); } result.add(permutation); } else { // Recursive case: Permute the remaining elements for each element at the current index. for (int i = startIndex; i < nums.length; i++) { swap(nums, startIndex, i); permute(nums, startIndex + 1, result); swap(nums, startIndex, i); } } } private static void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
int[] nums = {3, 4, 6, 2, 1}; List<List<Integer>> permutations = Permutation.permute(nums); for (List<Integer> permutation : permutations) { System.out.println(permutation); }
出力:
[3, 4, 6, 2, 1] [3, 4, 6, 1, 2] [3, 4, 2, 6, 1] [3, 4, 2, 1, 6] [3, 4, 1, 6, 2] [3, 4, 1, 2, 6] [3, 2, 6, 4, 1] [3, 2, 6, 1, 4] [3, 2, 4, 6, 1] [3, 2, 4, 1, 6] [3, 2, 1, 6, 4] [3, 2, 1, 4, 6] [3, 6, 4, 2, 1] [3, 6, 4, 1, 2] [3, 6, 2, 4, 1] [3, 6, 2, 1, 4] [3, 6, 1, 4, 2] [3, 6, 1, 2, 4] [6, 3, 4, 2, 1] [6, 3, 4, 1, 2] [6, 3, 2, 4, 1] [6, 3, 2, 1, 4] [6, 3, 1, 4, 2] [6, 3, 1, 2, 4] [6, 4, 3, 2, 1] [6, 4, 3, 1, 2] [6, 4, 2, 3, 1] [6, 4, 2, 1, 3] [6, 4, 1, 3, 2] [6, 4, 1, 2, 3] [2, 3, 6, 4, 1] [2, 3, 6, 1, 4] [2, 3, 4, 6, 1] [2, 3, 4, 1, 6] [2, 3, 1, 6, 4] [2, 3, 1, 4, 6] [2, 6, 3, 4, 1] [2, 6, 3, 1, 4] [2, 6, 4, 3, 1] [2, 6, 4, 1, 3] [2, 6, 1, 3, 4] [2, 6, 1, 4, 3] [4, 3, 6, 2, 1] [4, 3, 6, 1, 2] [4, 3, 2, 6, 1] [4, 3, 2, 1, 6] [4, 3, 1, 6, 2] [4, 3, 1, 2, 6] [4, 6, 3, 2, 1] [4, 6, 3, 1, 2] [4, 6, 2, 3, 1] [4, 6, 2, 1, 3] [4, 6, 1, 3, 2] [4, 6, 1, 2, 3] [1, 3, 6, 4, 2] [1, 3, 6, 1, 4] [1, 3, 4, 6, 1] [1, 3, 4, 1, 6] [1, 3, 1, 6, 4] [1, 3, 1, 4, 6] [1, 6, 3, 4, 2] [1, 6, 3, 1, 4] [1, 6, 4, 3, 1] [1, 6, 4, 1, 3] [1, 6, 1, 3, 4] [1, 6, 1, 4, 3] [2, 4, 3, 6, 1] [2, 4, 3, 1, 6] [2, 4, 6, 3, 1] [2, 4, 6, 1, 3] [2, 4, 1, 6, 3] [2, 4, 1, 3, 6] [2, 1, 4, 3, 6] [2, 1, 4, 1, 6] [2, 1, 6, 4, 3] [2, 1, 6, 1, 4] [2, 1, 3, 4, 6] [2, 1, 3, 1, 6] [6, 2, 4, 3, 1] [6, 2, 4, 1, 3] [6, 2, 1, 4, 3] [6, 2, 1, 3, 4] [6, 4, 2, 3, 1] [6, 4, 2, 1, 3] [6, 1, 2, 4, 3] [6, 1, 2, 1, 4] [6, 1, 4, 2, 3] [6, 1, 4, 1, 3] [6, 1, 3, 1, 4] [6, 1, 3, 4, 1] [4, 2, 6, 3, 1] [4, 2, 6, 1, 3] [4, 2, 1, 6, 3] [4, 2, 1, 3, 6] [4, 6, 2, 3, 1]
以上が再帰的アプローチを使用して、一意の整数の配列の可能なすべての順列を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。