46. 全排列

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
排列和组合的对index区别:
与216对比:index是数据的索引位置。当前位置处理完成后,下一层就是本层位置+1;传参i+1;
而对于排列问题:处理的当前位置,下一层是处理的位置即index+1;
List<List<Integer>> ret = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
dfs(nums,0);
return ret;
}
public void dfs(int[] nums, int index) {
if(index == nums.length) {
List<Integer> list = new ArrayList<>();
for(int i=0;i<nums.length;i++) {
list.add(nums[i]);
}
ret.add(list);
return;
}
for(int i=index;i<nums.length;i++) {
swap(nums,index,i);
// 整合是给了数据,根据需要拼,所以index的位置是遍历数据的位置
// 排列是给了数据,是对数据本身进行处理。所以index是处理数据的位置。所以这里是index+1
dfs(nums,index+1);
swap(nums,index,i);
}
}
public void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
浙公网安备 33010602011771号