力扣刷题——78.子集
78.子集
递归/回溯/枚举
也可以用二进制枚举的方法做,下面用枚举方法

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) 收藏 举报
浙公网安备 33010602011771号