回溯法框架参考这篇文章:
https://blog.csdn.net/qq_41901915/article/details/104113330
执行结果:
通过
显示详情
执行用时 :2 ms, 在所有 Java 提交中击败了53.81% 的用户
内存消耗 :37.4 MB, 在所有 Java 提交中击败了52.98%的用户
题目:
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
采用回溯法,并利用回溯法框架
主要就是找到几个关键点
第一个 选择空间,当然也就是传入的数组
第二个就是路径,自己创建一个路径就可以了
结束的条件
代码:
class Solution {
List<List<Integer>> result=new LinkedList<>();
public List<List<Integer>> permute(int[] nums) {
LinkedList<Integer> track=new LinkedList<>();
backtrack(nums,track);
return result;
}
public void backtrack(int[] nums,LinkedList<Integer> track)
{
//成功的条件
if(track.size()==nums.length)
{
result.add(new LinkedList<>(track));
return;
}
//这个for循环表示选择的空间
for(int i=0;i<nums.length;i++)
{
//如果已经选择过了,就不再选择了
if(track.contains(nums[i]))
{
continue;
}
//回溯法的核心先加入,递归,再去掉
track.add(nums[i]);
backtrack(nums,track);
track.removeLast();
}
}
}
IDEA_TEYU_1112 发布了418 篇原创文章 · 获赞 436 · 访问量 22万+ 关注