46.全排列
程序员小航
共 570字,需浏览 2分钟
·
2022-05-22 11:46
题目
题解
数组的全排列,其实就是当前数字和剩余数字的全排列汇总结果。
以示例中的[1,2,3]
举例,可以进行拆分为以下三个的结果集。
1 + [2,3]
2 + [1,3]
3 + [1,2]
然后子集又可以再次进行拆分,只需要进行递归即可。
递归终止条件是什么?
很显然,当数组只有一个时,就意味着不会再有其他的排列情况了,直接放入结果集即可。
class Solution {
public List> permute(int[] nums) {
List> res = new LinkedList<>();
List record = new LinkedList<>();
permute(res, record, nums);
return res;
}
public void permute(List> res ,List record, int[] nums)
{
if (nums.length == 1) {
record.add(nums[0]);
res.add(record);
return;
}
for (int i = 0; i < nums.length; i++) {
int[] ints = removeIndex(nums, i);
LinkedList list = new LinkedList<>(record);
list.add(nums[i]);
permute(res, list, ints);
}
}
public int[] removeIndex(int[] nums, int index) {
int[] ints = new int[nums.length - 1];
System.arraycopy(nums, 0, ints, 0, index);
System.arraycopy(nums, index + 1, ints, index, nums.length - index - 1);
return ints;
}
}
-
评论