java实现给定一个整数数组,返回数组中所有可能的排列
时间: 2023-08-23 18:04:50 浏览: 105
可以使用递归的方式实现全排列,具体步骤如下:
1. 终止条件:当数组的长度为1时,返回只包含该元素的数组。
2. 遍历数组,将每个元素与第一个元素交换,然后递归调用排列函数,将除第一个元素外的子数组作为参数,得到一个子排列数组。
3. 将第一个元素与后面的每个元素交换,得到其他的子排列数组。
4. 将所有子排列数组合并成一个数组,并返回。
Java代码实现如下:
```java
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if (nums == null || nums.length == 0) {
return res;
}
permute(nums, 0, res);
return res;
}
private void permute(int[] nums, int start, List<List<Integer>> res) {
if (start == nums.length - 1) {
List<Integer> list = new ArrayList<>();
for (int num : nums) {
list.add(num);
}
res.add(list);
return;
}
for (int i = start; i < nums.length; i++) {
swap(nums, start, i);
permute(nums, start + 1, res);
swap(nums, start, i);
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
```
这段代码中,`permute` 方法是递归实现全排列的主要方法,`swap` 方法用于交换数组中两个元素的位置。在 `permute` 方法中,如果当前位置是最后一个位置时,就将当前排列加入到结果列表中。否则,遍历数组,并将当前元素与第一个元素交换位置,然后递归调用 `permute` 方法,将子数组作为参数。递归回来后,将元素交换回原来的位置,遍历数组的下一个元素,重复上述过程,直到遍历完所有元素。
阅读全文