#yyds干货盘点# LeetCode 热题 HOT 100:全排列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# LeetCode 热题 HOT 100:全排列相关的知识,希望对你有一定的参考价值。
题目:
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]
代码实现:
import java.util.ArrayList;
import java.util.List;
public class Solution
public List<List<Integer>> permute(int[] nums)
int len = nums.length;
// 使用一个动态数组保存所有可能的全排列
List<List<Integer>> res = new ArrayList<>();
if (len == 0)
return res;
boolean[] used = new boolean[len];
List<Integer> path = new ArrayList<>();
dfs(nums, len, 0, path, used, res);
return res;
private void dfs(int[] nums, int len, int depth,
List<Integer> path, boolean[] used,
List<List<Integer>> res)
if (depth == len)
res.add(path);
return;
// 在非叶子结点处,产生不同的分支,这一操作的语义是:在还未选择的数中依次选择一个元素作为下一个位置的元素,这显然得通过一个循环实现。
for (int i = 0; i < len; i++)
if (!used[i])
path.add(nums[i]);
used[i] = true;
dfs(nums, len, depth + 1, path, used, res);
// 注意:下面这两行代码发生 「回溯」,回溯发生在从 深层结点 回到 浅层结点 的过程,代码在形式上和递归之前是对称的
used[i] = false;
path.remove(path.size() - 1);
public static void main(String[] args)
int[] nums = 1, 2, 3;
Solution solution = new Solution();
List<List<Integer>> lists = solution.permute(nums);
System.out.println(lists);
以上是关于#yyds干货盘点# LeetCode 热题 HOT 100:全排列的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# LeetCode 热题 HOT 100:最长有效括号
#yyds干货盘点# LeetCode 热题 HOT 100:对称二叉树
#yyds干货盘点# LeetCode 热题 HOT 100:旋转图像
#yyds干货盘点# LeetCode 热题 HOT 100:单词搜索