LeetCode-permutations-ii(중복 숫자의 배열 이 있 음)-자바

제목 설명:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,[1,1,2]have the following unique permutations:[1,1,2],[1,2,1], and[2,1,1].
사고방식 해석:
4.567917.이 문 제 는 전체 배열 을 바탕 으로 중복 되 는 지 아 닌 지 를 판단 해 야 한다.먼저 배열 을 작은 것 부터 큰 것 까지 배열 해 야 한다.이렇게 중복 되 는 것 은 모두 인접 해 있다4.567917.그리고 해 야 할 일 은 num[i-1]=num[i]의 경우 방문 한 적 이 없다 는 것 이다.이 럴 때 는 반복 되 는 결과 가 나 와 바로 뛰 어 넘 는 다
코드:
import java.util.*;
public class Solution {
    public ArrayList> permuteUnique(int[] num) {
        ArrayList> res = new ArrayList>();
        ArrayList item = new ArrayList();
        if(num==null || num.length==0){
            return res;
        }
        boolean[] visited = new boolean[num.length];
        Arrays.sort(num);
        helper(res,item,visited,num);
        return res;
    }
    private void helper(ArrayList> res,ArrayList item,boolean[] visited,int[] num){
        if(item.size() == num.length){
            res.add(new ArrayList(item));
            return;
        }
        for(int i=0;i0 &&num[i-1] == num[i]&&!visited[i-1]){
                continue;
            }
            if(!visited[i]){
                item.add(num[i]);
                visited[i]=true;
                helper(res,item,visited,num);
                item.remove(item.size()-1);
                visited[i]=false;
            }
        }
    }
}

좋은 웹페이지 즐겨찾기