46. 全排列
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- _46全排列_构建数组回溯
- _46全排列_直接构建
- 错误经验吸取
原题链接:
46. 全排列
https://leetcode.cn/problems/permutations/description/
完成情况:
解题思路:
参考代码:
_46全排列_构建数组回溯
package 代码随想录.回溯;import java.util.ArrayList;
import java.util.List;public class _46全排列_构建数组回溯 {List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> listSubset = new ArrayList<Integer>();private boolean used [];/*** 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。** @param nums* @return*/public List<List<Integer>> permute(int[] nums) {if (nums.length == 0){return result;}used = new boolean[nums.length];backTrack(nums); //没有先后顺序,返回所有排列结果return result;}/**** @param nums*/private void backTrack(int[] nums) {if (listSubset.size() == nums.length){result.add(new ArrayList<>(listSubset));return;}for (int i=0;i< nums.length;i++){if (used[i]){continue;}used[i] = true;listSubset.add(nums[i]);backTrack(nums);listSubset.remove(listSubset.size() - 1);used[i] = false;}}
}
_46全排列_直接构建
package 代码随想录.回溯;import java.util.ArrayList;
import java.util.List;public class _46全排列_直接构建 {List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> listSubset = new ArrayList<Integer>();/**** @param nums* @return*/public List<List<Integer>> permute(int[] nums) {if (nums.length == 0){return result;}backTrack(nums); //没有先后顺序,返回所有排列结果return result;}/**** @param nums*/private void backTrack(int[] nums) {if (listSubset.size() == nums.length){result.add(new ArrayList<>(listSubset));}for (int i=0;i< nums.length;i++){//利用list自带的特性if (listSubset.contains(nums[i])){continue;}listSubset.add(nums[i]);backTrack(nums);listSubset.remove(listSubset.size()-1);}}}