题目链接
英文链接:https://leetcode.com/problems/permutations/
中文链接:https://leetcode-cn.com/problems/permutations/
题目详述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
1 | 输入: [1,2,3] |
题目详解
DFS,回溯。
- 每次尝试固定一个位置,然后进入下一层。
- 回到本层时恢复原状。
- 递归的终止条件是当前固定位置的下标为
nums.length
,将这个排列加入结果集中。
1 | public class LeetCode_00046 { |
也可以按照全排列的生成规则直接得到下一个排列。
首先按照从小到大的顺序进行排序,得到第一个排列。
从后往前找到第一组位置,满足
nums[i] < nums[i + 1]
。找不到说明已经是最后一个排列,返回 false。- 从后往前找到第一个位置,满足
nums[i] < nums[j]
。 - 交换 i、j 两处的值。
- 反转从位置
i + 1
到末尾的序列,得到下一个排列,返回 true。
1 | public class LeetCode_00046 { |