面试题13. 机器人的运动范围
Posted yangbocsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题13. 机器人的运动范围相关的知识,希望对你有一定的参考价值。
面试题13. 机器人的运动范围
一、题目
地上有一个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。请问该机器人能够到达多少个格子?
二、参考代码
class Solution
public int movingCount(int m, int n, int k)
int[][] nums = new int[m][n];
int t = 0;
// 构造二维数组
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
t = 0;
int a = i;
int b = j;
while(a != 0)
t += a%10;
a = a/10;
while(b != 0)
t += b%10;
b = b/10;
// 模拟岛屿那题目,构造二维数组
if(t <= k)
nums[i][j] = 1;
else
nums[i][j] = 0;
return dfs(nums,0,0); //因为是从(0,0)开始,数连续陆地个数
public int dfs(int[][] nums,int i ,int j)
int m = nums.length;
int n = nums[0].length;
if(i < 0 || j < 0 || i >= m || j >= n)
return 0;
if(nums[i][j] == 0)
return 0;
nums[i][j] = 0;
return 1
+ dfs(nums,i-1,j)
+ dfs(nums,i+1,j)
+ dfs(nums,i,j-1)
+ dfs(nums,i,j+1);
以上是关于面试题13. 机器人的运动范围的主要内容,如果未能解决你的问题,请参考以下文章