博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器人的运动范围
阅读量:5158 次
发布时间:2019-06-13

本文共 1674 字,大约阅读时间需要 5 分钟。

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

 

java:

1 public class Solution { 2     private int rows ; 3     private int cols ; 4     private int cnt = 0 ; 5     private int threshold ; 6     private static final int[][] next = {
{0,1} , {0,-1} , {1,0} , {-1,0}} ; 7 private int[][] digitSum ; 8 public int movingCount(int threshold, int rows, int cols) 9 {10 this.threshold = threshold ;11 this.rows = rows ;12 this.cols = cols ;13 init() ;14 boolean[][] mark = new boolean[rows][cols] ;15 dfs(0,0,mark) ;16 return cnt ;17 }18 19 private void dfs(int r, int c , boolean[][] mark){20 if (r < 0 || r >= rows || c < 0 || c >=cols || mark[r][c])21 return ;22 mark[r][c] = true ;23 if (digitSum[r][c] > threshold)24 return ;25 cnt++ ;26 for(int[] n : next){27 dfs(r+n[0],c+n[1],mark) ;28 }29 }30 31 private void init(){32 int[] digitOne = new int[Math.max(rows,cols)] ;33 for(int i = 0 ; i < digitOne.length ; i++){34 int n = i ;35 while(n > 0){36 digitOne[i] += n%10 ;37 n/=10 ;38 }39 }40 digitSum = new int[rows][cols] ;41 for(int i = 0 ; i < rows ; i++){42 for(int j = 0 ; j < cols ; j++){43 digitSum[i][j] = digitOne[i] + digitOne[j] ;44 }45 }46 }47 }

 

转载于:https://www.cnblogs.com/mengchunchen/p/10622330.html

你可能感兴趣的文章
Json:Restful
查看>>
【iOS】Quartz2D基本图形
查看>>
字符串
查看>>
转:OAuth2 深入介绍
查看>>
hello world``````````
查看>>
利用android Matrix来处理简单图片
查看>>
第九周总结
查看>>
Microsoft Hololens开发上手(3)
查看>>
大数据时代之你不得不了解的大数据概念
查看>>
倒排索引
查看>>
【学习笔记】C# 构造和析构
查看>>
黑客新手入门
查看>>
PHPSTORM/IntelliJ IDEA 常用 设置配置优化
查看>>
python爬虫入门10.16
查看>>
MVC,MVP 和 MVVM 的图示
查看>>
Sql Server 的DataReader 与 DataSet
查看>>
关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用
查看>>
数据结构之B进制(确定进制)
查看>>
python小白-day9 数据库操作与Paramiko模块
查看>>
git push 冲突
查看>>