博客
关于我
(00)剑指 Offer 13. 机器人的运动范围
阅读量:319 次
发布时间:2019-03-03

本文共 1854 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要计算机器人能够到达的网格数目。机器人从起点 [0, 0] 开始移动,每次可以向上、下、左、右移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。

方法思路

我们可以使用广度优先搜索(BFS)来遍历网格。BFS适合这种层次遍历问题,因为它可以逐层扩展,确保每个格子只被访问一次。具体步骤如下:

  • 初始化队列:将起点 [0, 0] 加入队列,并标记为已访问。
  • 处理队列:对于队列中的每个格子,检查四个方向的可能移动。
  • 检查条件:对于每个可能的移动,检查是否在网格内,未被访问过,数位和不超过k。
  • 加入队列:如果满足条件,将该格子加入队列并标记为已访问。
  • 统计结果:处理完所有格子后,返回已访问格子的数目。
  • 解决代码

    public class Solution {
    public int movingCount(int m, int n, int k) {
    if (k == 0) {
    return 1;
    }
    boolean[][] visited = new boolean[m][n];
    java.util.Queue
    queue = new java.util.LinkedList
    ();
    visited[0][0] = true;
    queue.add(new int[]{0, 0});
    int ans = 1;
    int[] dx = {-1, 0, 1, 0};
    int[] dy = {0, 1, 0, -1};
    while (!queue.isEmpty()) {
    int[] cell = queue.poll();
    int x = cell[0];
    int y = cell[1];
    for (int i = 0; i < 4; i++) {
    int tx = x + dx[i];
    int ty = y + dy[i];
    if (tx < 0 || tx >= m || ty < 0 || ty >= n) {
    continue;
    }
    if (visited[tx][ty]) {
    continue;
    }
    int sum = get(tx) + get(ty);
    if (sum > k) {
    continue;
    }
    visited[tx][ty] = true;
    ans++;
    queue.add(new int[]{tx, ty});
    }
    }
    return ans;
    }
    private int get(int num) {
    int res = 0;
    while (num != 0) {
    res += num % 10;
    num /= 10;
    }
    return res;
    }
    }

    代码解释

  • 初始化:检查k是否为0,直接返回1。创建一个二维数组visited来记录访问状态,并初始化队列。
  • 方向数组:定义上下左右四个方向的增量数组dxdy
  • 队列处理:循环处理队列中的每个格子,检查四个方向的可能移动。
  • 条件检查:确保移动后的坐标在网格内,未被访问过,数位和不超过k。
  • 访问标记:将符合条件的格子加入队列并标记为已访问。
  • 数位和计算:使用get函数计算数位之和。
  • 通过这种方法,我们可以高效地计算机器人能够到达的网格数目。

    转载地址:http://nzbq.baihongyu.com/

    你可能感兴趣的文章
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    numpy学习笔记3-array切片
    查看>>
    numpy数组替换其中的值(如1替换为255)
    查看>>
    numpy数组索引-ChatGPT4o作答
    查看>>
    numpy最大值和最大值索引
    查看>>
    NUMPY矢量化np.prod不能构造具有超过32个操作数的ufunc
    查看>>
    Numpy矩阵与通用函数
    查看>>
    numpy绘制热力图
    查看>>
    numpy转PIL 报错TypeError: Cannot handle this data type
    查看>>
    Numpy闯关100题,我闯了95关,你呢?
    查看>>
    nump模块
    查看>>
    Nutch + solr 这个配合不错哦
    查看>>
    NuttX 构建系统
    查看>>
    NutUI:京东风格的轻量级 Vue 组件库
    查看>>
    NutzCodeInsight 2.0.7 发布,为 nutz-sqltpl 提供友好的 ide 支持
    查看>>
    NutzWk 5.1.5 发布,Java 微服务分布式开发框架
    查看>>