LeetCode实战:46. 全排列
题目
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [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/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法实现
public class Solution {
public IList<IList<int>> Permute(int[] nums) {
List<IList<int>> res = new List<IList<int>>();
dfs(res,new List<int>(),nums,new bool[nums.Length]);
return res;
}
public void dfs(List<IList<int>> res,List<int> temp,int[] nums,bool[] visited)
{
if(temp.Count==nums.Length)
{
res.Add(new List<int>(temp));
return;
}
for(int i=0;i<nums.Length;i++)
{
if(!visited[i])
{
temp.Add(nums[i]);
visited[i]=true;
dfs(res,temp,nums,visited);
visited[i]=false;
temp.RemoveAt(temp.Count-1);
}
}
}
}
思路
利用回溯的方法 。并且使用一个bool数组标识数组中哪些元素被访问过了,然后递归,填到n个数就得到一个排列。
回