给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
今天的算法我是实在做不出来,看了看解答看懂了原理但是对写出来没什么信息,刚接触JAVA感觉还有许多函数不会运用
不过除了回溯法,我也看到一种有趣的解法就是插入法即一个一个元素往可能的选项中插空。
class Solution {
public void backtrack(int n,
ArrayList<Integer> nums,
List<List<Integer>> output,
int first) {
if (first == n)
output.add(new ArrayList<Integer>(nums));
for (int i = first; i < n; i++) {
Collections.swap(nums, first, i);//nums要进行交换的链表,first,和i时准备进行交换的元素。
backtrack(n, nums, output, first + 1);
Collections.swap(nums, first, i);
}
}
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> output = new LinkedList();
ArrayList<Integer> nums_lst = new ArrayList<Integer>();
for (int num : nums)
nums_lst.add(num);
int n = nums.length;
backtrack(n, nums_lst, output, 0);
return output;
}
}
955

被折叠的 条评论
为什么被折叠?



