Day5----回溯算法(下)

题目合集

491 && 46 && 47 && 51 && 37

可再刷

491.递增子序列

做题思路总结

491.递增子序列

//难点1.答案所求递增子序列,故不可用排序先行处理
//难点2.集合和包含重复元素,如何对答案去重
//忽略点:答案需要收割所有节点
//解决思路:一般题直接用used数组去重,在这得需要set
//核心伪代码:
	if(!path.empty()&&nums[i]<path.back()||set.find(nums[i])!=set.end())
		continue;//第一部分不符合递增条件,第二部分是重复;那么跳过If这个条件才开始收割答案,递归回溯

46.全排列

//每层逻辑都从0开始,使用过的数用used数组记录
//收割的是叶子节点(最终答案)
//终止条件:收割大小==集合大小

47.全排列2(集合包含重复元素)

//核心思路:由于是全排列,所以集合中重复的元素排列情况必然一致,那么对集合进行排序,重复的直接continue
//判重逻辑:num[i]==num[i-1]&&used[i-1]==0

51.N皇后

//核心思路:对每一个位置尝试放皇后,判断是否合法,每层的逻辑必然得加一个判断的函数
//参数:N皇后每层的逻辑就是遍历“当前行的每一列”,所以棋盘的行数就是遍历的深度,棋盘的列数就是每层遍历的宽度,那么递归参数必须要有一个记录“当前行数”
backtracking(int n,int row,vector<string>&chessboard)
if(row==n) 收割答案

37.解数独

//核心思路:对每一个位置尝试填数字,判断是否合法,但是数字又是一个集合问题,需要遍历数字集合本身;所以先两次循环,确定好要填写的位置,单层的判断逻辑改成遍历数字集合
//难点:小9宫格的划分以及数字的判重逻辑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值