0
点赞
收藏
分享

微信扫一扫

全排列II-回溯

  • 题目
  • 示例
  • 代码
class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> cur = new ArrayList<>();
    boolean[] visited;

    public boolean isValid(int[] nums,int i) {
        if (!visited[i]) {
            if (i >= 1 && nums[i] == nums[i-1] && !visited[i-1]) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    public void backTracking(int[] nums) {
        if (nums.length == cur.size()) {
            res.add(new ArrayList<>(cur));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            if (!isValid(nums,i)) {
                continue;
            }
            cur.add(nums[i]);
            visited[i] = true;
            backTracking(nums);
            cur.remove(cur.size() - 1);
            visited[i] = false;    
        }
    }
    public List<List<Integer>> permuteUnique(int[] nums) {
        visited = new boolean[nums.length];
        Arrays.sort(nums);
        backTracking(nums);
        return res;
    }
}
举报

相关推荐

0 条评论