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:机器人的运动范围的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-机器人的运动范围-56

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

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

面试题13-机器人的运动范围

机器人的运动范围

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