46. 全排列
2021/12/20 23:19:55
本文主要是介绍46. 全排列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
链接
46. 全排列 - 力扣(LeetCode) (leetcode-cn.com)
解法一
1 class Solution { 2 3 List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合 4 LinkedList<Integer> path = new LinkedList<>();// 用来存放符合条件结果 5 boolean[] used; 6 public List<List<Integer>> permute(int[] nums) { 7 if (nums.length == 0){ 8 return result; 9 } 10 used = new boolean[nums.length]; 11 permuteHelper(nums); 12 return result; 13 } 14 15 private void permuteHelper(int[] nums){ 16 if (path.size() == nums.length){ 17 result.add(new ArrayList<>(path)); 18 return; 19 } 20 for (int i = 0; i < nums.length; i++){ 21 if (used[i]){ 22 continue; 23 } 24 used[i] = true; 25 path.add(nums[i]); 26 permuteHelper(nums); 27 path.removeLast(); 28 used[i] = false; 29 } 30 } 31 }
解法二
1 // 解法2:通过判断path中是否存在数字,排除已经选择的数字 2 class Solution { 3 List<List<Integer>> result = new ArrayList<>(); 4 LinkedList<Integer> path = new LinkedList<>(); 5 public List<List<Integer>> permute(int[] nums) { 6 if (nums.length == 0) return result; 7 backtrack(nums, path); 8 return result; 9 } 10 public void backtrack(int[] nums, LinkedList<Integer> path) { 11 if (path.size() == nums.length) { 12 result.add(new ArrayList<>(path)); 13 } 14 for (int i =0; i < nums.length; i++) { 15 // 如果path中已有,则跳过 16 if (path.contains(nums[i])) { 17 continue; 18 } 19 path.add(nums[i]); 20 backtrack(nums, path); 21 path.removeLast(); 22 } 23 } 24 }
参考
carl
这篇关于46. 全排列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南