LeetCode-90-Subsets II(回溯)-Medium
阿新 • • 發佈:2019-02-03
題意理解:
同題78,但所給數列中可能存在重複元素;
題目分析:
1. 解題思路同題78;
2. 在同級遍歷中,如果發現當前元素在之前已出現,則跳過;
解題程式碼:
public class Solution { private ArrayList<ArrayList<Integer>> ans= new ArrayList<ArrayList<Integer>>(); private boolean find(int[] nums, int indexBegin, int indexCur, int n){ if(indexCur==indexBegin){ return false; } boolean ans=false; for(int i=indexBegin; i<indexCur; i++){ if(nums[i]==n){ ans=true; break; } } return ans; } private void process(ArrayList<Integer> list, int[] nums, int initPos, int n){ if(n==0){ ans.add(list); return; } if(initPos==nums.length){ return; } for(int i=initPos; i<nums.length; i++){ if(find(nums, initPos, i, nums[i])){ continue; } ArrayList<Integer> tList= new ArrayList(list); tList.add(new Integer(nums[i])); process(tList, nums, i+1, n-1); } } public List<List<Integer>> subsetsWithDup(int[] nums) { Arrays.sort(nums); for(int i=0; i<=nums.length; i++){ ArrayList<Integer> list=new ArrayList<Integer>(); process(list, nums, 0, i); } return (List)ans; } }