题目
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
算法实现
public IList<IList<int>> Permute(int[] nums)
{
IList<IList<int>> list = new List<IList<int>>();
list.Add(new List<int>() { nums[0] });
int beforeListCount;
for (int numsContain = 1; numsContain < nums.Length; numsContain++)//加入的数组元素
{
beforeListCount = list.Count;
for (int addListTimes = 0; addListTimes < numsContain; addListTimes++)//对前面的list内容复制
{
for (int k = 0; k < beforeListCount; k++)
{
list.Add(new List<int>(list[k]));
}
}
for (int insertIndex = 0, i = 0; insertIndex < list.Count; insertIndex += beforeListCount, i++)//insert
{
for (int j = 0; j < beforeListCount; j++)
{
list[insertIndex + j].Insert(i, nums[numsContain]);
}
}
}
return list;
}
执行结果
执行结果 : 通过
执行用时 : 348 ms, 在所有 C# 提交中击败了100.00%的用户
内存消耗 : 30.6 MB, 在所有 C# 提交中击败了7.14%的用户
小的总结
本次题目稍难,自己花了很长时间设计算法,排除bug,最终成功写出了这个程序,很不容易。
回溯法还没有看太懂,之后会继续学习。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。