第五十九天树状问题
学习笔记:
1。横向越权:横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源。纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
2。电商网站开发模块:用户模块开发,分类管理模块开发,商品管理模块开发,购物车模块开发,收货地址管理模块开发,支付模块开发,订单管理模块开发
3。90。子集II
给你一个整数数组nums,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。输入:nums〔1,2,2〕
输出:〔〔〕,〔1〕,〔1,2〕,〔1,2,2〕,〔2〕,〔2,2〕〕
解题思路:遍历数组,分别对选取当前元素和不选取当前元素做递归,设置一个visited数组来记录当前的状态,如果不选取,传入false,反之传入true。如果遇到重复的元素,就直接跳过,直到遍历完整个数组,将一组子集添加到结果集,再进行回溯。classSolution{ListListIntegerresnewArrayListListInteger();ListIntegertmpnewArrayListInteger();publicListListIntegersubsetsWithDup(int〔〕nums){Arrays。sort(nums);dfs(false,nums,0);returnres;}publicvoiddfs(booleanvisited,int〔〕nums,intindex){intnnums。length;if(indexn){res。add(newArrayListInteger(tmp));return;}dfs(false,nums,index1);if(!visitedindex0nums〔index〕nums〔index1〕){return;}tmp。add(nums〔index〕);dfs(true,nums,index1);tmp。remove(tmp。size()1);}}
4。401。二进制手表
二进制手表顶部有4个LED代表小时(011),底部的6个LED代表分钟(059)。每个LED代表一个0或1,最低位在右侧。
给你一个整数turnedOn,表示当前亮着的LED的数量,返回二进制手表可以表示的所有可能时间。你可以按任意顺序返回答案。
小时不会以零开头:
例如,01:00是无效的时间,正确的写法应该是1:00。
分钟必须由两位数组成,可能会以零开头:
例如,10:2是无效的时间,正确的写法应该是10:02。
示例1:输入:turnedOn1
输出:〔0:01,0:02,0:04,0:08,0:16,0:32,1:00,2:00,4:00,8:00〕
解题思路:采用枚举法,将小时和分钟的所有情况的二进制和列出来,如果和目标值相同,说明这是一组满足条件的情况,将它加入结果集即可。classSolution{publicListStringreadBinaryWatch(intturnedOn){ListStringresnewArrayListString();for(inth0;h12;h){for(intm0;m59;m){if(Integer。bitCount(h)Integer。bitCount(m)turnedOn){res。add(h:(m10?0:)m);}}}returnres;}}