深度优先遍历(DFS)- Letter CasePermutation - Combinations
深度优先遍历(DFS)
思路:从图中一个未访问的顶点V开始,沿着一条路一直走到尽头,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到尽头…,不断递归重复此过程,直到所有顶点都遍历完成。
特点:不撞南墙不回头,先走完一条路,再换另一条路,继续走,和数的前序遍历一样
树的深度优先遍历
1.从根节点1开始遍历,它的子节点有2,3,4,先遍历节点2,再遍历节点5,之后遍历节点9.
2.第一条路已经走到底了,9是叶子节点,没有子节点,从9回退到节点5,看节点5是否还有没有遍历的节点,若没有,继续回退,回退到节点2,节点2还是没有未遍历的节点,继续回退,回退到根节点1。
发现根节点1有两个未遍历的子节点3和4,选择节点3,继续向下遍历,
和步骤2一样,一条路遍历到最后一个叶子节点10,开始回退,回退到6,继续回退到3,发现节点3未遍历,此时遍历节点7.
从节点7回退,回退到节点3,再回退到根节点1,选择未遍历的子节点4,一直往下遍历,依次遍历节点4,节点8.
完整节点的遍历顺序:1,2,5,9,3,6,10,7,4,8
综上所述:就会发现树的深度优先遍历就是数的前序遍历
递归实现:前序遍历(根节点,左节点,右节点)
1.题目:Letter CasePermutation
- English
Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.
Examples:
Input: S = “a1b2”
Output: [“a1b2”, “a1B2”, “A1b2”, “A1B2”]
Input: S = “3z4”
Output: [“3z4”, “3Z4”]
Input: S = “12345”
Output: [“12345”]
Note:
S will be a string with length at most 12.
S will consist only of letters or digits.
- 中文:
给定一个字符串S,我们可以将每个字母分别转换为小写或大写以创建另一个字符串。返回我们可以创建的所有可能字符串的列表。
示例:
输入:S=“a1b2”
输出:[“a1b2”,“a1B2”,“A1B2”,“A1B2”]
输入:S=“3z4”
输出:[“3z4”,“3Z4”]
输入:S=“12345”
输出:[“12345”]
注:
S将是一个长度不超过12的字符串。
S将仅由字母或数字组成。
分析思路:
由于输入的字符串中只有字母和数字,小写字母的ASCll码范围是:97~ 122,大写字母的ASCll码范围是:65~ 90,数字字符的范围是:49~57。观察到数字字符的ascll码比字母都要小而且小写字母比对应的大写字母大32,采用异或32刚好是2的32次方,所以相当于小写字母的二进制表示ASCll码从右往左的第6位由0变成1就变成了对应的大写字母同理对于大写字母把第六位的1变成0就是大写向小写的转换,这个过程可以用S[i]^32来完成。代码:
class Solution{public:vector<string> ans; //全局变量vector<string> letterCasePermutation(string S){dfs(S,0); //搜索所有字符串和当前位 return ans;}void dfs(string S,int u){ //传字符串与当前枚举到第几位 if(u==S.size()){ans.push_back(S);return;}dfs(S,u+1);//当前位不变 if(S[u]>='A')//若是字母 {S[u]^=32; //大写变小写,异或32 ASII:A=65,a=97 dfs(S,u+1);int main(){} }}
};
2.题目:Combinations
English:
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
中文:
给定两个整数n和k,返回1中k个数的所有可能组合…n。
例如,
如果n=4,k=2,则解为:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
- 分析思路:
搜组合数(保证不重不漏),从前往后排列1,2,3…n从前往后看每个数是不是要选,从前往后选k个数,保证所选的次序是有序的,从前往后选(从小到大),这样就不用再去考虑顺序问题,因为选好的数都是按顺序排列好的,(顺序不会导致产生新的方案,不会重复)
- 代码:
class Solution{public:vector<vector<int> > ans; //全局变量 vector<vector<int> > combine(int n,int k){vector<int> path; //方案 dfs(path,1,n,k); //传参,方案,1-n,k:需要选的数 return ans;}void dfs(vector<int> &path,int start,int n,int k) //start:当前可选起始位置,n:总数,k:当前需要选的数 {if(!k){ //出口条件,不需要选任何数 ans.push_back(path); //加入计数中 return; }for(int i=start;i<=n;i++) //可选起始位置 {path.push_back(i); //更新状态 ,加入i dfs(path,i+1,n,k-1); //递归搜索 ,当前数为i,所以下一个可选数为i+1(保证选得数从小到大),剩余选k-1个数 path.pop_back();//回溯,恢复现场,前面加入i,在此处把最后一个元素删掉 }}
};
深度优先遍历(DFS)- Letter CasePermutation - Combinations相关推荐
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- Java实现深度优先遍历-DFS
Java实现深度优先遍历-DFS 实现功能:使用深度优先遍历算法DFS计算地铁指定起点站和终点站之间的所有路径 1.构造地铁站点数据结构 地铁站点数据结构包含2个属性,1个站点名,1个邻接站点列表 i ...
- 图的深度优先遍历DFS(JAVA)
图的深度优先遍历算法 在此介绍图的基本算法之一的深度优先遍历(DFS)算法 广度优先搜索(BFS). 什么是DFS 图是由节点(Node)和路径(Route)组成的一种数据结构,用于反应各节点间的关系 ...
- 华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏.玩家需要根据9X9盘面上 ...
- 图——深度优先遍历(DFS)实现有向无环图的逆拓扑排序
对图的深度遍历与对树的深度遍历思想类似,采用的是递归函数的办法. 如果是非连通图,则DFS遍历所有顶点即可. //Graph 图 //vertex 顶点,用一个int型变量表示//返回有向图G中顶点v ...
- 图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现
遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DFS) 1,在访问图中某一起始顶点V后,由V ...
- Java数据结构之图的基本概念和算法,深度优先遍历DFS,广度优先遍历BFS(图解)
文章目录 前言 一.图的基本概念 1.图的定义 2.基本术语 二.图的基本算法 1.初始化图 2.插入顶点和边 3.矩阵打印 4.返回第一个邻接结点的下标 5.返回第一个邻接结点的下一个结点的下标 三 ...
- Unique Binary Search Trees ll -深度优先遍历DFS
题目:Unique Binary Search Trees ll English: Given an integer n, generate all structurally unique BST's ...
- 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
https://www.cnblogs.com/qzhc/p/10291430.html 最后一个广度优先有错误,H不指向E,只有G指向E,所以顺序应该是ABCFDHGE
最新文章
- 【作业】组合数据类型练习,英文词频统计实例
- intimidated
- A quick complete tutorial to save and restore Tensorflow models
- 【小白学习tensorflow教程】二、TensorBoard可视化模型训练
- 【faster-rcnn】训练自己的数据集时的坑
- 弗吉尼亚理工计算机科学排名,2020年弗吉尼亚理工大学排名TFE Times美国最佳计算机科学硕士专业排名第45...
- Spring----最小化Spring配置
- 实现较低的计时器粒度以重传TCP(RTO):时间轮算法如何减少开销
- robotframework的学习笔记(十六)----robotframework标准库String
- jquery 如何插入元素
- 苹果手机显示iphone已停用连接itunes_iTunes备份道理我都懂,但我依然不想备份的?...
- Bibles_Numpy离线文档
- app测试环境搭建(适用monkey测试及日志分析)
- 根据经纬度获取位置信息
- 各类软件激活码(更新中)
- NetBeans ide操作流程及注意事项
- 〖2011.08.19〗秋无痕常用软件全功能装机光盘2011年八月版(支持64位WIN7)
- .net core Fleck WebSocket使用笔记
- 【USACO题库】1.5.4 Checker Challenge跳棋的挑战
- 购物商城html源码asp,购物商城 html
热门文章
- python编程语言-初学者最容易学的六种编程语言
- python必背100源代码-学会这个Python库,至少能减少100行代码
- 学python能干什么工作-什么是Python?学完之后能做哪些工作?
- python语言的读法-就语法而言,Python 这个语言怎么样?
- python用什么来写模块-Python常用模块——模块介绍与导入
- 语音识别错误太多?高科技巨头们偏偏“不信邪”
- python中的缩进是长度统一吗_python缩进长度是否统一
- oracle byte 转string,C# 中 byte 转化成string
- FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
- 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组