刷题Day28|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列

思路:递归+回溯。所有节点都有可能是结果,不用写终止条件。但是要判断每个子序列结果和是否valid。由于横向我们不能取重复的元素,使用set记录已经使用过的元素,竖向是可以使用相同的元素(只要不是重复使用)。

注意:

1.不能排序。排序完的数组就都是自增子序列了。

2.set在回溯的时候不用返回操作,因为每次都会新建一个set(局部变量) 。

46.全排列

思路:used数组记录竖向不能重复使用元素。i = 0开始表示横向可以重复取元素(因为元素所在位置不一样)。每个叶子结点是一个结果,需要终止条件。for循环中递归加回溯。

47.全排列 II

思路:去重,记得要排序。横向和竖向都需要去重!横向去重:数组相邻相等&&used[i - 1]为false;竖向去重:used[i]为true。去重情况continue。

注意:used[i]=true是竖向去重,=false是横向去重,横向去重效率高一点。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值