【剑指Offer】66、机器人的运动范围
题目描述:
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
解题思路:
本题和上一题:65、矩阵中的路径 很类似,同样是一道典型的回溯搜索的题目,代码模板基本类似。同样的,题目中的方格也可以看成一个m*n的矩阵。
机器人从坐标为(0,0)的点开始移动,当它准备进入坐标为(i,j)的格子时,通过检查坐标的位数之和来判断机器人是否能够进入,如果能够进入,则再判断是否能进入4个相邻的格子(i,j-1)(i,j+1)(i-1,j)(i+1,j)。
详见如下代码实现。
编程实现(Java):
public class Solution {
public int movingCount(int threshold, int rows, int cols){
if(rows<0||cols<0||threshold<0)
return 0;
boolean[][] flags=new boolean[rows][cols]; //标记是否访问过
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++)
flags[i][j]=false;
}
return movingCount(threshold,rows,cols,0,0,flags);
}
//从(i,j)出发可以到达的格子数目
public int movingCount(int threshold,int rows,int cols,int i,int j,boolean[][] flags){
int count=0;
if(check(i,j,rows,cols,flags,threshold)){ //(i,j)可达
flags[i][j]=true;
count=1+movingCount(threshold,rows,cols,i+1,j,flags)+
movingCount(threshold,rows,cols,i-1,j,flags)+
movingCount(threshold,rows,cols,i,j+1,flags)+
movingCount(threshold,rows,cols,i,j-1,flags);
}
return count;
}
//判断能否进入(row,col)的方格
public boolean check(int row,int col,int rows,int cols,boolean[][] flags,int threshold){
if(row<0 || row>=rows || col<0 || col>=cols) //超出范围
return false;
//超过范围,或者已经访问过
if(getDigitSum(row)+getDigitSum(col)>threshold || flags[row][col]==true)
return false;
return true;
}
//求一个数各位之和
public int getDigitSum(int num){
int sum=0;
while(num!=0){
sum+=(num%10);
num/=10;
}
return sum;
}
}
【剑指Offer】66、机器人的运动范围的更多相关文章
- 剑指Offer 66. 机器人的运动范围 (回溯)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- [剑指Offer] 66.机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归
剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...
- 剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一 ...
- 【Java】 剑指offer(12) 机器人的运动范围
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移 ...
- Go语言实现:【剑指offer】机器人的运动范围
该题目来源于牛客网<剑指offer>专题. 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之 ...
- 剑指offer:机器人的运动范围(回溯法DFS)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指offer——14机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指offer 66. 构建乘积数组(Leetcode 238. Product of Array Except Self)
剑指offer 66. 构建乘积数组 题目: 给定一个数组A[0, 1, ..., n-1],请构建一个数组B[0, 1, ..., n-1],其中B中的元素B[i] = A[0] * A[1] * ...
- 剑指 Offer 66. 构建乘积数组 + 思维
剑指 Offer 66. 构建乘积数组 Offer_66 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarre ...
随机推荐
- ORACLE database console无法登陆
登陆EM时给我报这个错 Code d'erreur : ssl_error_weak_server_cert_key 仅仅须要关闭EM的SSL就好了 [oracle@ace-PROD1 ~]$ emc ...
- The return type is incompatible with JspSourceDependent.getDependants():JasperException问题分析与解决方法
Linux下基于JSP的报表集成到项目中后,显示不出来,查看tomcat的日志.有例如以下报错信息: The return type is incompatible with JspSourceDep ...
- UVA 10385 - Duathlon(三分法)
UVA 10385 - Duathlon 题目链接 题意:一些运动员,參加铁人两项,跑步r千米,骑车k千米,如今知道每一个人的跑步和骑车速度,问是否能设置一个r和k,保持r + k = t,使得第n个 ...
- Swift 进阶
iOS开发系列--Swift进阶 2015-09-21 00:01 by KenshinCui, 3072 阅读, 12 评论, 收藏, 编辑 概述 上一篇文章<iOS开发系列--Swift语言 ...
- LeetCode 83. Remove Duplicates from Sorted List (从有序链表中去除重复项)
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- cocos2d-x之android编译环境搭建(第二篇)[版本号:cocos2d-x-3.1.1]
基于 Android NDK 的学习之旅-----环境搭建 工欲善其事 必先利其器 , 以下介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发 ...
- R环境中的工作空间(workspace)
工作空间(workspace)就是当前R的工作环境,它储存着全部用户定义的对象(向量.矩阵.函数.数据框.列表) . 在一个R会话结束时,你能够将当前工作空间保存到一个镜像中.并在下次启动R时自己主动 ...
- Ubuntu 16.04 安装CodeBlocks
首先将软件源添加进来,就是运行以下命令 sudo add-apt-repository ppa:damien-moore/codeblocks-stable sudo apt-get update 完 ...
- WPF-使用面板控制内容布局,比较Canvas,WrapPanel,StackPanel,Grid,ScrollViewer
WPF-使用面板控制内容布局,比较Canvas,WrapPanel,StackPanel,Grid,ScrollViewer 分类: WPF2012-04-24 09:59 660人阅读 评论(0) ...
- 【POJ 1723】 SOLDIERS
[题目链接] http://poj.org/problem?id=1723 [算法] 中位数 [代码] #include <algorithm> #include <bitset&g ...