欢迎光临散文网 会员登陆 & 注册

刷题第十四天

2023-08-16 23:37 作者:叶荜莉  | 我要投稿

93. 复原 IP 地址:

这题设置一个pn,记录已经加了多少个‘.’,当pn==3时,验证最后一段是否合法,合法加入结果集。这里对string的处理,用了insert函数和erase函数。

78. 子集:

子集需要收集每个节点的结果,递归函数设置两个参数,一个是nums数组,一个是开始下标s,先收集path,再开始for循环。画出树会容易很多。

90. 子集 II:

这题和78是差不多的思路,但是这题nums有重复的数值,因此需要去重。采用map记录nums元素是否被使用过。

这题的关键在于,去重一定要先将nums排序。我一开始模拟[1,2,2],重复的数值会在同一个for循环出现,这样就方便去重。但如果是[2,1,2],模拟一下树会发现,重复的数值不在同一个层次了。

491. 递增子序列:

要在每一个节点收集结果的话,就不需要在收集之后return了。如果在终止条件里还return的是收集叶子节点的。

这题也是设置一个map记录已经出现过的元素进行去重,但这题不需要排序就可以去重,原因是,递增子序列的根本其实是排列,排列是有顺序的,上面做的比如子集问题,子集是没有顺序的,没有实现排列的话,那么会出现重复的但顺序不一样的子集。但这题要求的是递增的子序列,重复的不满足要求的子集自然就排除了。画一下图会很好理解。

46. 全排列:

终止条件是当path的长度等于nums的长度时,记录进结果集。设置一个for循环,每次都从0开始,循环到结尾。先将nums[i]存进path,然后递归删除了nums[i]的nums,递归结束pop。

47. 全排列 II:

46题再加个map标记遍历过的num就好了。

332. 重新安排行程:

困难题,我不会,一脸蒙,看了题解。用unordered_map<string起始机场,map<string到达机场,int趟数>>数据结构。当res的长度为机场数时返回true。循环当前机场可以到达的所有机场,如果还有趟数,就存进结果集,趟数减一,递归到达的机场到下一个机场,递归结束趟数要加回来。




刷题第十四天的评论 (共 条)

分享到微博请遵守国家法律