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

本文共 1810 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    nvm切换node版本
    查看>>
    nvm安装 出现 Error retrieving “http://xxxx/SHASUMS256.txt“: HTTP Status 404 解决方法
    查看>>
    nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
    查看>>
    NXLog采集windows日志配置conf文件
    查看>>
    ny540 奇怪的排序 简单题
    查看>>
    NYOJ -216 A problem is easy
    查看>>
    NYOJ 1066 CO-PRIME(数论)
    查看>>
    NYOJ 737:石子合并(一)(区间dp)
    查看>>
    nyoj 91 阶乘之和(贪心)
    查看>>
    nyoj------203三国志
    查看>>
    NYOJ-525 一道水题
    查看>>
    NYOJ127星际之门(一)
    查看>>
    nyoj58 最少步数
    查看>>
    N皇后问题
    查看>>
    N皇后问题
    查看>>
    n种方式教你用python读写excel等数据文件
    查看>>
    OAuth 2.0 MAC Tokens
    查看>>
    OAuth 及 移动端鉴权调研
    查看>>
    OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    查看>>
    OAuth2 Provider 项目常见问题解决方案
    查看>>