全排列
解题思路:
回溯。去试探每个结果的正确性。
代码:
public IList<IList<int>> Permute(int[] nums)
{
IList<IList<int>> result = new List<IList<int>>();//结果。
IList<int> lgx = new List<int>();//临时链表,存放每次可能的结果。
huisu(nums, result, lgx);//回溯。
return result;
}//全排列。
public void huisu(int[] nums,IList<IList<int>> result,IList<int> lgx)
{
if(lgx.Count==nums.Length)
{
result.Add(new List<int>(lgx));
return;
}//当临时链表中的个数等于需要的个数时返回。
for(int i=0;i<nums.Length;i++)
{
if (lgx.Contains(nums[i]))
continue;//如果已经有这个数,跳过。
lgx.Add(nums[i]);
huisu(nums, result, lgx);
lgx.RemoveAt(lgx.Count - 1);//保证临时链表中元素的正确性,每次回溯都要删除这一步选择的数。
}
}//回溯。