力扣刷题——78.子集

78.子集

递归/回溯/枚举

也可以用二进制枚举的方法做,下面用枚举方法

image

package leetcode;

import java.util.ArrayList;
import java.util.List;

public class T78 {
	
	public static void main(String[] args) {
		System.out.println(new T78().new Solution().subsets(new int[]{1, 2, 3}));;
	}
	
	class Solution {
	    public List<List<Integer>> subsets(int[] nums) {
	    	
	    	List<List<Integer>> ans = new ArrayList<>();
	    	List<Integer> tmp;
	    	
	    	int cut = 1 << nums.length;//即(2^n)
	    	
	    	for (int i = 0; i < cut; ++i) {//0-((2^n)-1
	    		tmp = new ArrayList<>();
	    		
	    		for (int j = 0; j < nums.length; ++j) {
	    			//依次判断是否要取第j位数字
	    			if ((i & (1 << j)) != 0) {
	    				tmp.add(nums[j]);
	    			}
	    		}
	    		ans.add(tmp);
	    	}
	    		
	    	return ans;
	    }
	}
}

posted on 2023-02-25 12:34  pumpkinsBig  阅读(24)  评论(0)    收藏  举报

导航