Java實現-帶重複元素的子集

Narasimha_Karumanchi發表於2017-06-30

給定一個可能具有重複數字的列表,返回其所有可能的子集

 注意事項
  • 子集中的每個元素都是非降序的
  • 兩個子集間的順序是無關緊要的
  • 解集中不能包含重複子集
樣例

如果 S = [1,2,2],一個可能的答案為:

[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]
class Solution {
    /**
     * @param nums: A set of numbers.
     * @return: A list of lists. All valid subsets.
     */
    public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] nums) {
        // write your code here
        Arrays.sort(nums);
		ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
		ArrayList<Integer> tempList=new ArrayList<Integer>();
		backTracking(nums, 0, result, tempList);
		return result;
    }
    private static void backTracking(int[] nums, int start, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> tempList){
		result.add(new ArrayList<Integer>(tempList));
		for(int i=start;i<nums.length;i++){
			if(i>start&&nums[i]==nums[i-1]){
				continue;
			}else{
				tempList.add(nums[i]);
				backTracking(nums, i+1, result, tempList);
				tempList.remove(tempList.size()-1);
			}
		}
	}

}


相關文章