Given a set of distinct integers,?nums, return all possible subsets.
Note:?The solution set must not contain duplicate subsets.
For example,
If?nums?=?[1,2,3]
, a solution is:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[] ]
昨天中秋加上頭非常痛,歇了一天。早上起來看了個cse學生的新聞,又滾回被窩里睡了好久,準備再歇一天的。打開看了看一畝三分地,別人99道題
就能刷進linkedin,雖然基礎可能差蠻多但還是非常想去投一投簡歷試試的。過了九月就大批招聘來了,一定要抓緊時間刷刷題看看書。沒有書
上知識的支撐只看公開課視頻感覺還是很虛沒底。
思路:dfs+backtracking。對節點的操作需要注意:1.碰到節點就記錄到result:即為pos<=nums.length 2.dps的方向,盡頭(回溯點):pos==nums.length
每一層的操作用pos來記錄,防重復。
畫graph可以深入理解不同的dps,各種的對節點操作。
public class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res=new ArrayList<>();List<Integer> check=new ArrayList<>();dps(nums,res,check,0);return res;}public void dps(int[] nums,List<List<Integer>> res,List<Integer> list,int pos){if(pos<=nums.length){res.add(new ArrayList<Integer>(list));}if(pos==nums.length){return;}for(int i=pos;i<nums.length;i++){list.add(nums[i]);dps(nums,res,list,++pos);list.remove(list.size()-1);}}}
?