LeetCode 剑指 Offer 13. 机器人的运动范围(深度遍历)

文章讨论了LeetCode剑指Offer13问题的解决方案,即计算机器人在给定限制下的最大运动范围。通过深度遍历算法,标记0、1、2表示未访问、可到达和不可到达的格子,确保在不超过k值的范围内移动。最终返回机器人能到达的不同位置数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

原题

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

思路

  • 通过深度遍历来找出所有可达的格子
  • 通过0、1、2来区分未遍历、可到达、不可到达三种状态

代码

class Solution {
public:
    int visited[109][109];
    int cnt = 0;
    int direction[4][2] ={
        {1,0},
        {-1,0},
        {0,1},
        {0,-1}
    };
    int numK, numM, numN;
    bool canVisited(int i, int j){
        int num = 0;
        while (i != 0){
            num += i%10;
            i /= 10;
        }
        while (j != 0){
            num += j%10;
            j /= 10;
        }
        if (num <= numK) return true;
        return false;
    }
    void traverse(int i, int j){
        if (!canVisited(i, j)){
            visited[i][j] = 2;
            return;
        } 
        visited[i][j] = 1;
        cnt++;
        for (int t = 0; t < 4; t++){
            int newi = i + direction[t][0];
            int newj = j + direction[t][1];
            if (newi >= 0 && newi < numM && newj >= 0 && newj < numN && visited[newi][newj] == 0) traverse(newi, newj); 
        }
    }
    int movingCount(int m, int n, int k) {
        numK = k; numM = m; numN = n;
        traverse(0, 0);
        return cnt;
    }
};

运行截图

在这里插入图片描述

收获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值