给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
成功
显示详情
执行用时 : 5 ms, 在Permutations的Java提交中击败了58.59% 的用户
内存消耗 : 38.1 MB, 在Permutations的Java提交中击败了80.48% 的用户
class Solution {
public List> permute(int[] nums) {
List > res = new ArrayList >();
if(nums.length == 0)
return res;
List tmp = new ArrayList();
boolean[] visited = new boolean[nums.length];
helper(nums, res, visited, tmp);
return res;
}
public void helper(int[] nums, List > res, boolean[] v, List tmp){
if(tmp.size() == nums.length){
res.add(new ArrayList(tmp) );
return;
}
for(int i=0; i
还有一种交换的算法 我没没推明白。
给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
成功
显示详情
执行用时 : 6 ms, 在Permutations II的Java提交中击败了73.79% 的用户
内存消耗 : 41.7 MB, 在Permutations II的Java提交中击败了85.57% 的用户
class Solution {
public List> permuteUnique(int[] nums) {
List> res = new ArrayList >();
if (nums.length == 0)
return res;
boolean[] visited = new boolean[nums.length];
List tmp = new ArrayList();
Arrays.sort(nums);
helper(nums, res, visited, tmp);
return res;
}
public void helper(int[] nums, List> res, boolean[] v, List tmp){
if(nums.length == tmp.size() ){
res.add(new ArrayList(tmp) );
return;
}
for(int i=0; i
相似题目:
(回溯)leetcode 子集II java
(回溯法)leetcode 子集 java