leetcode机器人运动范围Java_【LeetCode】面试题13. 机器人的运动范围
题目:
思路:
矩阵搜索,因为可以上下左右移动,判断机器人是否能够走到位置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. 机器人的运动范围相关推荐
- LeetCode 面试题13. 机器人的运动范围
我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Alg ...
- 面试题13. 机器人的运动范围
面试题13. 机器人的运动范围 思路:dfs+判断 class Solution { public:int movingCount(int m, int n, int k) {res = 0;dfs( ...
- 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动 ...
- 剑指offer:面试题13. 机器人的运动范围
题目:机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外 ...
- 剑指offer 回溯法 面试题12 矩阵中的路径 面试题13 机器人的运动范围
题目12 bool has_path_core(char *matrix, int rows, int cols, int row, int col, string a, int &pathl ...
- 【LeetCode】剑指 Offer 13. 机器人的运动范围
[LeetCode]剑指 Offer 13. 机器人的运动范围 文章目录 [LeetCode]剑指 Offer 13. 机器人的运动范围 package offer;public class Solu ...
- LeetCode 剑指Offer 13 机器人的运动范围
LeetCode 剑指Offer 13 机器人的运动范围 题目 解题 解题一:深度优先搜索 解题二:广度优先搜索 解题三:动态规划 题目 解题 深度优先和广度优先解题思路参考: 剑指 Offer 13 ...
- leetcode 最常见的150道前端面试题(简单题下)
本文题目选自 LeetCode 精选 TOP 面试题[1],这些题在自己和同事亲身经历中,确实遇到的几率在百分之80%以上(成都和北京的前端岗位). 本篇是简单题(下)20题左右,上半部分详见leet ...
- 【算法面试】leetcode最常见的150道前端面试题 --- 中等题
点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 兄弟姐妹们,中等题来了,本篇17道,剩下63道,每周更新10道! 之前简单题的链接如下: [算法面试]leetcode最常见 ...
最新文章
- 数据结构算法的引言+时间复杂度
- 不知道当前谁激活键盘时的隐藏键盘方法
- yolor 测试笔记
- 2008_12_24_星期三
- 兰山天书(贺兰山岩画)
- java 连接 sftp失败,与apache vfs的SFTP连接失败,但使用WinSCP成功
- 几行代码,网盘链接提头来见!
- IE下列表框不能给option绑定click事件的解决办法
- 插图 引用 同一行两个插图_提出食物主题中的插图
- 我的网页设计(网页页面制作二)
- 超详细:Springboot连接centos7下redis6的必要配置和失败分析
- Linux C语言实现清除文件中的内容
- iis 回收工作进程时出错的解决办法
- JS 没有块级作用域
- Unity WIndows语音识别(一)关键字识别
- protues 学习
- 【数字IC验证快速入门】4、熟悉数字IC验证中常用的Linux基本操作
- Windows动态链接库DLL和静态库的原理以及创建方法
- Java的JVM,GC是什么?
- bzoj 1941 kd-tree求最大最小曼哈顿距离