leetcode:机器人的运动范围
Posted 敲代码的Messi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode:机器人的运动范围相关的知识,希望对你有一定的参考价值。
题意:地上有一个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
实现思想: 回溯
class Solution
int _k;
int _m;
int _n;
int _count = 0;
vector<vector<bool>> _status;
public:
int movingCount(int m, int n, int k)
if (0 >= m || 0 >= n)
return 0;
if (k <= 0)
return 1;
_k = k;
_n = n;
_m = m;
_status = vector<vector<bool>>(m, vector<bool>(n, false));
search(0, 0);
return _count;
void search(int x, int y)
if (0 > x || x >= _m)// 边界处理
return;
if (0 > y || y >= _n)
return;
int count = 0;
int cur_x = x;
int cur_y = y;
while (cur_x)
count += (cur_x % 10);
cur_x /= 10;
/* code */
while (cur_y)
count += (cur_y % 10);
cur_y /= 10;
if (count > _k) // 此路不通
return;
if (_status[x][y] == true) //已经走过
return;
_count++;
_status[x][y] = true;
// 往四个方向递归
search(x + 1, y);
search(x - 1, y);
search(x, y + 1);
search(x, y - 1);
;
以上是关于leetcode:机器人的运动范围的主要内容,如果未能解决你的问题,请参考以下文章