位运算
2021-02-26 本文已影响0人
Talk1sCheap
左移 <<
右移 >>
判断奇偶 a&1==0
除2 a>>1
使i位为1 a+=(1<<i-1)
枚举子集
本质是n位的枚举,两层循环。
外层是2^n的可能性,内层则是i对每n位的检测
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res=new ArrayList<>();
List<Integer> tmp=new ArrayList<>();
int n=nums.length;
for(int i=0;i<1<<n;i++){
tmp.clear();
//一个for就好了
for(int j=0;j<n;j++){
if(((i>>j)&1) == 1){
tmp.add(nums[j]);
}
}
//这里是最骚的 直接tmp会变量污染
res.add(new ArrayList<>(tmp));
}
return res;
}