题目:

思路:

矩阵搜索,因为可以上下左右移动,判断机器人是否能够走到位置x,只需要判断机器人能否走到它的上下左右的位置,并且x点满足条件。但是判断x点时,它的上下左右如果还没有判断过呢?这时陷入了瓶颈。

如下图所示,观察到这样一个矩阵是有规律的。机器人可以只通过向下、向右移动就可以到达所有可达解。

缩小移动方向后,本题就变成了经典的矩阵搜索问题,通常采用深度优先搜索、广度优先搜索解决。

深度优先搜索: 利用递归解决,沿着某个方向搜到低,再回溯至上个节点继续。需要确定递归的终止条件,返回值,子问题。如果某个节点已经访问过,则它的右、下子节点以及子节点的子节点都已经访问过了。

广度优先搜索: 利用队列解决。

可以将行坐标和列坐标数位之和大于k的格子看作障碍物,但是障碍物是有规律的。

代码:

Python

def digitSum(x):

s = 0

while x:

s += x % 10

x = x // 10

return s

class Solution(object):

def movingCount(self, m, n, k):

"""

:type m: int

:type n: int

:type k: int

:rtype: int

"""

# 深度优先

def dfs(x, y):

# 终止条件

if x >= m or y >= n or (x, y) in visited or digitSum(x) + digitSum(y) > k:

return 0

visited.add((x, y))

return 1 + dfs(x + 1, y) + dfs(x, y + 1)

visited = set()

return dfs(0, 0)

# 广度优先

# queue, visited = [(0, 0)], set()

# while queue:

# (x, y) = queue.pop(0)

# if x < m and y < n and (x, y) not in visited and digitSum(x) + digitSum(y) <= k:

# visited.add((x, y))

# queue.append((x + 1, y))

# queue.append((x, y + 1))

# return len(visited)

# 推导

# vis = set([(0, 0)])

# for i in range(m):

# for j in range(n):

# if ((i - 1, j) in vis or (i, j - 1) in vis) and digitSum(i) + digitSum(j) <= k:

# vis.add((i, j))

# return len(vis)

相关问题

标签:面试题,return,int,13,dfs,节点,digitSum,visited,LeetCode

来源: https://www.cnblogs.com/cling-cling/p/12958100.html

leetcode机器人运动范围Java_【LeetCode】面试题13. 机器人的运动范围相关推荐

  1. LeetCode 面试题13. 机器人的运动范围

    我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Alg ...

  2. 面试题13. 机器人的运动范围

    面试题13. 机器人的运动范围 思路:dfs+判断 class Solution { public:int movingCount(int m, int n, int k) {res = 0;dfs( ...

  3. 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动 ...

  4. 剑指offer:面试题13. 机器人的运动范围

    题目:机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外 ...

  5. 剑指offer 回溯法 面试题12 矩阵中的路径 面试题13 机器人的运动范围

    题目12 bool has_path_core(char *matrix, int rows, int cols, int row, int col, string a, int &pathl ...

  6. 【LeetCode】剑指 Offer 13. 机器人的运动范围

    [LeetCode]剑指 Offer 13. 机器人的运动范围 文章目录 [LeetCode]剑指 Offer 13. 机器人的运动范围 package offer;public class Solu ...

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

    LeetCode 剑指Offer 13 机器人的运动范围 题目 解题 解题一:深度优先搜索 解题二:广度优先搜索 解题三:动态规划 题目 解题 深度优先和广度优先解题思路参考: 剑指 Offer 13 ...

  8. leetcode 最常见的150道前端面试题(简单题下)

    本文题目选自 LeetCode 精选 TOP 面试题[1],这些题在自己和同事亲身经历中,确实遇到的几率在百分之80%以上(成都和北京的前端岗位). 本篇是简单题(下)20题左右,上半部分详见leet ...

  9. 【算法面试】leetcode最常见的150道前端面试题 --- 中等题

    点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 兄弟姐妹们,中等题来了,本篇17道,剩下63道,每周更新10道! 之前简单题的链接如下: [算法面试]leetcode最常见 ...

最新文章

  1. 数据结构算法的引言+时间复杂度
  2. 不知道当前谁激活键盘时的隐藏键盘方法
  3. yolor 测试笔记
  4. 2008_12_24_星期三
  5. 兰山天书(贺兰山岩画)
  6. java 连接 sftp失败,与apache vfs的SFTP连接失败,但使用WinSCP成功
  7. 几行代码,网盘链接提头来见!
  8. IE下列表框不能给option绑定click事件的解决办法
  9. 插图 引用 同一行两个插图_提出食物主题中的插图
  10. 我的网页设计(网页页面制作二)
  11. 超详细:Springboot连接centos7下redis6的必要配置和失败分析
  12. Linux C语言实现清除文件中的内容
  13. iis 回收工作进程时出错的解决办法
  14. JS 没有块级作用域
  15. Unity WIndows语音识别(一)关键字识别
  16. protues 学习
  17. 【数字IC验证快速入门】4、熟悉数字IC验证中常用的Linux基本操作
  18. Windows动态链接库DLL和静态库的原理以及创建方法
  19. Java的JVM,GC是什么?
  20. bzoj 1941 kd-tree求最大最小曼哈顿距离

热门文章

  1. CASE_02 基于FPGA的数字钟万年历
  2. 我有单片机,你有酒吗?
  3. Questasim10.6c下载与安装教程
  4. FPGA课程设计使用VHDL语言
  5. 基于FPGA跳舞机实现
  6. ROracle Mysql_ROracle包查询数据库中文乱码
  7. html标签强制转换位置,王老师html零基础学习笔记第4课——样式初始化+类型转化...
  8. 博客园是个大金矿,管理员不挖掘有些可惜:给博客园提一些双赢的建议
  9. python学习笔记9-函数1
  10. LInux 阿里云系统遇到挖矿程序