• 图是网络结构的抽象模型,是一组由边连接的节点

    图的表示法

    邻接矩阵

    image.png

    邻接表

    image.png

    图的深度优先遍历

  • 尽可能深的搜索图的分支

  • 访问根节点
  • 对根节点的没访问过的相邻节点挨个进行深度优先遍历

image.png

  1. const graph = {
  2. 0: [1, 2],
  3. 1: [2],
  4. 2: [0, 3],
  5. 3: [3]
  6. };
  7. const visited = new Set()
  8. const dfs = (n) => {
  9. // 先访问根节点
  10. console.log(n)
  11. visited.add(n)
  12. // 拿到根节点的相邻节点
  13. graph[n].forEach(c => {
  14. // 如果没有访问过
  15. if(!visited.has(c)) {
  16. // 递归调用
  17. dfs(c)
  18. }
  19. })
  20. }
  21. dfs(2)

图的广度优先遍历

  • 先访问离根节点更近的节点
  • 新建队列,把根节点入队
  • 把队头出队并访问shift()
  • 把队头的没访问过的相邻节点入队
  • 重复23,直到队列为空

image.png

  1. const visited = new Set();
  2. // 定义队列,加入队头
  3. const q = [2]
  4. // 队列不为空
  5. while (q.length) {
  6. // 队头出队
  7. const n = q.shift();
  8. // 访问对头
  9. console.log(n);
  10. // 记录访问过的节点
  11. visited.add(n)
  12. // 相邻节点遍历
  13. graph[n].forEach(c => {
  14. // 如果没访问过,就入队
  15. if(!visited.has(c)) {
  16. q.push(c);
  17. }
  18. })
  19. }

题目

有效的数字-65

有效数字(按顺序)可以分成以下几个部分:

  1. 一个 小数 或者 整数
  2. (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符(’+’ 或 ‘-‘)
  2. 下述格式之一:
    • 至少一位数字,后面跟着一个点 ‘.’
    • 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字
    • 一个点 ‘.’ ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符(’+’ 或 ‘-‘)
  2. 至少一位数字

部分有效数字列举如下:

  • [“2”, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789”]

部分无效数字列举如下:

  • [“abc”, “1a”, “1e”, “e3”, “99e2.5”, “—6”, “-+3”, “95a54e53”]

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

示例 1:
输入:s = “0”
输出:true

示例 2:
输入:s = “e”
输出:false

示例 3:
输入:s = “.”
输出:false

示例 4:
输入:s = “.1”
输出:true

提示:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 ‘+’ ,减号 ‘-‘ ,或者点 ‘.’ 。

解题思路
image.png