通过万岁!!!
- 题目:就是给你一个数组,找到这个数组中的所有的排列组合。
- 思路:就是进行交换即可,这里存在子问题。首先我们交换i和i+1之后的,然后从i+1开始是一个新的子问题,我们也是一样需要交换。而上面的时候我们不只是交换i+1,一直到最后,我们都需要交换一下。并且这里i也是需要交换i自己的,这样可以保证原始的也在里面。
- 技巧:递归。
java代码
class Solution {
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
// 交换位置即可,从i开始交换到最后,每次
getList(0, nums.length, nums);
return ans;
}
public void getList(int begin, int end, int[] nums) {
if (begin == end) {
List<Integer> list = new ArrayList<>();
for (int i : nums) {
list.add(i);
}
ans.add(list);
}
int temp;
for (int i = begin; i < end; i++) {
temp = nums[begin];
nums[begin] = nums[i];
nums[i] = temp;
getList(begin + 1, end, nums);// 从begin+1到end进行新的排列
// 回溯一下
temp = nums[begin];
nums[begin] = nums[i];
nums[i] = temp;
}
}
}
- 总结:题目不是很难,主要是交换,并且交换完以后,还是需要变回之前的样子。