码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-12-21 11:27:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:lse   等于   public   多少   数组   solution   div   有一个   类型   

题目描述:

地上有一个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。请问该机器人能够到达多少个格子?

题目分析:对于矩阵 我们可以直接遍历该矩阵,计算出符合要求的格子,且该格子的左放或者上方也是符合要求的。

可以建立一个二维boolean类型的数组,辅助挑选符合要求的格子,默认[0,0] 坐标为true;

 

代码如下

 1 class Solution {
 2     public int movingCount(int m, int n, int k) {
 3 
 4         // 计数器
 5         int count = 0;
 6 
 7         // 辅助二维数组
 8         boolean[][] helper = new boolean[m][n];
 9 
10         // (0,0)设置为true
11         helper[0][0] = true;
12         
13         // 遍历坐标方格
14         for (int i = 0; i<m; i++) {
15             
16             for (int j = 0; j<n; j++) {
17 
18                 // 判断该坐标数位之和小于K,且左边或者上边符合条件
19                 if (judgeCoordinate(i, j, k) && (helper[i][j-1>0?j-1:0] || helper[i-1>0?i-1:0][j])) {
20 
21                     helper[i][j] = true;
22                     count++;
23                     
24                     
25                     
26                 } else {
27                     
28                     continue;
29                 }          
30             
31             }
32 
33         }
34 
35         return count;
36 
37 
38     }
39 
40 
41     // 判断坐标数位和是否小于等于k
42     public boolean judgeCoordinate(int m, int n, int k) {
43 
44         return (m/10 + m%10 + n/10 + n%10) <= k;
45 
46     }
47 
48 }

 

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

标签:lse   等于   public   多少   数组   solution   div   有一个   类型   

原文地址:https://www.cnblogs.com/maktub-96/p/14141764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!