leetcode-搜索专题

1. 关于搜索

在leetcode上,搜索一般只会涉及BFS和DFS,所以本文仅仅关注这俩个。并给出一些我对搜索的理解,代码都是类似c++的伪代码。

1.1 BFS和DFS小谈

这里给出俩中搜索的模板,如果是第一次接触的话,这里仅仅对俩个模板有印象就可以了。后面会遇到具体的题,再回来看这里的模板。就非常有意思了。

1.1.1 BFS模板

void bfs()
	queue.push(start)
	while(queue.size())
		step++
		for i : queue.size()
			curr = queue.pop()
			for eachChild : findChilds(curr)
				if !isVisited(eachChild)
					queue.push(eachChild)					

简单注释下:
bfs的要点就是记录每次横向的长度。将我们的遍历分为一层,一层。一般情况下,会用到step来记录每一层。

1.1.2 DFS模板

dfs比较灵活,但是最常用的还是如下参数
d: 表示迭代深度
maxDepth: 表示最大迭代深度
path: 表示当前迭代的路径
res: 一般为结果集

res
void dfs(currVal, d, maxDepth,  path)
	if(d == maxDepth)
		res.push_back(path)
		return
	for eachChild : findChilds(currVal)
		... // 可能有一些判断条件
		path.push_back(eachChild)
		dfs(eachChild, d+1, maxDepth, path)
		path.pop_back();

2. 题目一览

这里盗用一个B站up主的图,花花酱leetcode,我的很多思路都是和他学的。
在这里插入图片描述

2.1 排列和组合问题

2.1.1 排列问题

1. 综述

排列问题这里我简单描述小,就是n个元素换位置的问题。明白排列问题是什么比较简单,但难的是如何看出哪些是排列问题。

2. 送上来的排列问题

leetcode-47-全排列
你会发现,大部分的排列问题都会在此基础上变化。

class Solution {
   
public:
    vector<vector<int>> permute(vector<int>& nums) {
   
        vector<vector<int>> res;
        vector<bool> isVisited(nums.siz
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值