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

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

时间:2020-10-22 22:53:45      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:传递   ==   code   count   dfs   problems   rgb   单元格   ESS   

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

示例 1:

输入:m = 2, n = 3, k = 1
输出:3

示例 2:

输入:m = 3, n = 1, k = 0
输出:1

提示:

1 <= n,m <= 100
0 <= k <= 20

思路:

dfs每次遍历四个方向,没有越界且行列数字之和小于等于k则递归遍历它,否则跳过

 1 class Solution {
 2 
 3     // 获取数字的数位之和
 4     public int getSumOfBit(int a){
 5         int sum = 0;
 6         while(a != 0){
 7             sum += a % 10;
 8             a /= 10;
 9         }
10         return sum;
11     }
12 
13     public boolean[][] vis; // 判断是否遍历过
14     public int m, n, k;     // 记录m,n,k,减少变量传递的开销
15     public int cnt = 0; // 计数器,记录能到达的格子数量
16 
17     public int movingCount(int m, int n, int k) {
18 
19         vis = new boolean[m][n];
20         this.m = m;
21         this.n = n;
22         this.k = k;
23 
24         // dfs遍历
25         dfs(0, 0);
26 
27         return cnt;
28     }
29 
30     public int[][] dir = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
31 
32     public void dfs(int row, int col){
33         vis[row][col] = true;
34         cnt++;
35         // 每次遍历四个方向,没有越界且行列数字之和小于等于k则递归遍历它,否则跳过
36         for(int i = 0; i < 4; i++){
37             int newRow = row + dir[i][0];
38             int newCol = col + dir[i][1];
39             if(newRow <m && newRow >= 0 && newCol < n && newCol >= 0 
40             && (getSumOfBit(newRow) + getSumOfBit(newCol)) <= k && vis[newRow][newCol] == false){
41                 dfs(newRow, newCol);
42             }
43         }
44     }
45 }

leetcode运行时间为2ms, 空间为35.4MB

复杂度分析:

时间复杂度:每个单元格最多被遍历一次,最坏情况下遍历所有单元格,所以时间复杂度为O(n*m)

空间复杂度:需要一个大小为n*m的 vis[][]数组记录单元格是否被访问过,递归也会有一个递归栈的复杂度,最大深度为max(m, n), 所以空间复杂度为O(n*m + max(m,n))

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

标签:传递   ==   code   count   dfs   problems   rgb   单元格   ESS   

原文地址:https://www.cnblogs.com/hi3254014978/p/13858271.html

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