采用递归算法产生a[0:2]={1,2,3 }的全排列,写出Java代码
时间: 2023-04-02 12:00:39 浏览: 121
以下是Java代码:
```
public class Permutations {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
permute(nums, , nums.length - 1);
}
public static void permute(int[] nums, int l, int r) {
if (l == r) {
System.out.println(Arrays.toString(nums));
} else {
for (int i = l; i <= r; i++) {
swap(nums, l, i);
permute(nums, l + 1, r);
swap(nums, l, i);
}
}
}
public static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
```
相关问题
Java语言实现下题:2、采用递归算法产生a[0:2]={1,2,3}的全排列。写出算法实现代码并截屏程序的运行结果。
在Java中,我们可以使用递归的方式来生成数组`a[0:2]`的所有全排列,这个例子中数组包含元素{1, 2, 3}。下面是一个递归算法的实现:
```java
import java.util.ArrayList;
import java.util.List;
public class Permutations {
public static void main(String[] args) {
int[] a = {1, 2, 3};
List<List<Integer>> result = generatePermutations(a);
// 打印结果
for (List<Integer> permutation : result) {
System.out.println(permutation);
}
}
// 递归函数,生成所有全排列
private static List<List<Integer>> generatePermutations(int[] arr) {
if (arr.length == 0) {
return Collections.singletonList(new ArrayList<>());
} else {
List<List<Integer>> permutations = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
// 将当前元素放在第一位,其余元素进行递归排列
int firstElement = arr[i];
List<Integer> remainingElements = new ArrayList<>(Arrays.copyOfRange(arr, 0, i));
List<Integer> subPermutations = generatePermutations(Arrays.copyOfRange(arr, i + 1, arr.length));
// 将第一个元素添加到每个子排列的结果中
for (List<Integer> subPermutation : subPermutations) {
permutations.add(subPermutation.stream()
.map(element -> firstElement).concat(subPermutation)
.collect(Collectors.toList()));
}
}
return permutations;
}
}
}
```
当你运行这个程序,它会打印出所有可能的数组{1, 2, 3}的全排列,例如:[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]。
阅读全文