(回溯法+访问标志数组)leetcode 全排列+全排列II

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [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

还有一种交换的算法 我没没推明白。

 

全排列II

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [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

你可能感兴趣的:(算法题)