题目为 给定一个 没有重复 数字的序列,返回其所有可能的全排列。
这道题之前没有了解过回溯法,看了题解,学习了思路。
精选题解链接:这个精选讲解的很好
题解里有这一张图,可以让你直接看懂回溯算法
时间复杂度:O(N×N!)
C#代码如下
public IList<IList<int>> Permute(int[] nums)
{
IList<IList<int>> res = new List<IList<int>>();
IList<int> list = new List<int>();
trackback(nums, res, list);
return res;
}
public void trackback(int[] nums, IList<IList<int>> res, IList<int> list)
{
//已经生成了一个排列 加入结果集中 返回
if (list.Count == nums.Length)
{
res.Add(new List<int>(list));
return;
}
for (int i = 0; i < nums.Length; i++)
{
//不包含元素 就添加
if (!list.Contains(nums[i]))
{
list.Add(nums[i]);
}
else
{
continue;
}
trackback(nums, res, list);
//移除末尾元素 回复到递归前状态
list.RemoveAt(list.Count - 1);
}
}