【LeetCode每日一题】剑指 Offer 13. 机器人的运动范围(持续更新)

简介: 【LeetCode每日一题】剑指 Offer 13. 机器人的运动范围(持续更新)

今日题目(剑指Offer系列)

剑指 Offer 13. 机器人的运动范围

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。
一个机器人从坐标 [0, 0] 的格子开始移动,
它每次可以向左、右、上、下移动一格(不能移动到方格外),
也不能进入行坐标和列坐标的数位之和大于k的格子。
例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。
但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

示例:

示例 1:
输入:m = 2, n = 3, k = 1
输出:3
示例 2:
输入:m = 3, n = 1, k = 0
输出:1

解题思路:

>这道题的意思就是在m行n列的矩阵中找出符合要求的格子
>而且要从(0,0)点开始
>显示这要用到dfs,但是这里有一个地方需要注意
>就是这道题不需要进行回溯,因为是计数,如果回溯会发生重复
>对于Python来说,不太好创建visit标记数组
>所以可以用set集合进行解决,set中存取每个位置的元组

Python解法一(DFS):

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        def dfs(i,j):
            if i<0 or j<0 or i>=m or j>=n or (i // 10 + i % 10 + j // 10 + j % 10) > k or (i,j) in visit:
                return 0
            visit.add((i,j))
            return dfs(i+1,j)+dfs(i-1,j)+dfs(i,j+1)+dfs(i,j-1)+1
        visit=set()
        return dfs(0,0)

Python解法二(BFS):

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        def bfs():
            queue=[]
            queue.append([0,0])
            direction=[[0,1],[1,0]]
            count=0
            while len(queue)>0:
                count+=1
                val=queue[0]
                queue.remove(val)
                for direc in direction:
                    i=val[0]+direc[0]
                    j=val[1]+direc[1]
                    if not (i<0 or j<0 or i>=m or j>=n or (i // 10 + i % 10 + j // 10 + j % 10) > k or (i,j) in visit):
                        queue.append([i,j])
                        visit.add((i,j))
            return count
        visit=set()
        return bfs()

Java解法一(DFS):

class Solution {
    public int movingCount(int m, int n, int k) {
        boolean[][] visit = new boolean[m][n];
    return dfs(0, 0, k, visit);
    }
    public int dfs(int i, int j, int k, boolean[][] visit) {
    if (i < 0 || j < 0 || i >= visit.length || j >= visit[0].length || visit[i][j] || (i / 10 + i % 10 + j / 10 + j % 10) > k) {
      return 0;
    }
    visit[i][j] = true;
    return dfs(i + 1, j, k, visit) + dfs(i - 1, j, k, visit) + dfs(i, j + 1, k, visit) + dfs(i, j - 1, k, visit)+1;
  }
}

Java解法一(BFS):

class Solution {
    public int movingCount(int m, int n, int k) {
        boolean[][] visit = new boolean[m][n];
    return bfs(visit, k);
    }
    public int bfs(boolean[][] visit, int k) {
    Queue<int[]> queue = new LinkedList<int[]>();
    queue.add(new int[] { 0, 0 });
    int[][] directions = new int[][] { { 0, 1 }, { 1, 0 } };
    int count = 0;
    while (queue.size() > 0) {
      count++;
      int[] val = queue.poll();
      for (int[] dir : directions) {
        int i = val[0] + dir[0];
        int j = val[1] + dir[1];
        if (!(i < 0 || j < 0 || i >= visit.length || j >= visit[0].length
            || (i / 10 + i % 10 + j / 10 + j % 10) > k || visit[i][j])) {
          queue.add(new int[] { i, j });
          visit[i][j] = true;
        }
      }
    }
    return count;
  }
}


目录
相关文章
|
16天前
|
算法 机器人 Python
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
本文深入讲解机器人逆运动学中旋转计算的核心数学工具,包括矩阵指数与对数、SO(3)李群与李代数、流形和切空间等概念,帮助理解三维旋转误差计算原理,并提供基于矩阵指数的精确旋转更新方法及代码实现。
75 1
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
|
2月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
|
6月前
|
传感器 人工智能 算法
傅利叶开源人形机器人,提供完整的开源套件!Fourier N1:具备23个自由度和3.5米/秒运动能力
傅利叶推出的开源人形机器人N1搭载自研动力系统与多模态交互模块,具备23个自由度和3.5米/秒运动能力,提供完整开源套件助力开发者验证算法。
432 3
傅利叶开源人形机器人,提供完整的开源套件!Fourier N1:具备23个自由度和3.5米/秒运动能力
|
7月前
|
算法 机器人 数据安全/隐私保护
四自由度SCARA机器人的运动学和动力学matlab建模与仿真
本课题深入研究SCARA机器人系统,提出其动力学与运动学模型,并基于MATLAB Robotics Toolbox建立四自由度SCARA机器人仿真对象。通过理论结合仿真实验,实现了运动学正解、逆解及轨迹规划等功能,完成系统实验和算法验证。SCARA机器人以其平面关节结构实现快速定位与装配,在自动生产线中广泛应用,尤其在电子和汽车行业表现优异。使用D-H参数法进行结构建模,推导末端执行器的位姿,建立了机器人的运动学方程。
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
140 6
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
146 4
|
数据可视化 机器人 Python
实例9:四足机器人运动学正解平面RR单腿可视化
本文是关于四足机器人正向运动学(FK)的实例教程,通过Python编程实现了简化的mini pupper平面二连杆模型的腿部可视化,并根据用户输入的关节角计算出每个关节相对于基坐标系的坐标。
303 1
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
105 4
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
85 3

热门文章

最新文章