JZ13 机器人的运动范围

机器人的运动范围_牛客题霸_牛客网

地上有一个 rows 行和 cols 列的方格。坐标从 0,0rows-1,cols-1 。一个机器人从坐标 0,0 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当 threshold 为 18 时,机器人能够进入方格 35,37 ,因为 3+5+3+7 = 18。但是,它不能进入方格 35,38 ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?

数据范围: 0≤threshold≤15 0≤threshold≤15 ,1≤rows,cols≤100 1≤rows,cols≤100

m = 10, n = 5

00 01 02 03 04 05 06 07 08 09

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35 36 37 38 39

40 41 42 43 44 45 46 47 48 49

if thresold = 3, 能走的路径:00 01 02 03,10,11 ,12,20 ,21,30, row+col <=3

if thresold = 8,能走的路径: 00~08, 10~17, 20~26,30~35,40~44, row+col<=8

数位和:123456----->1+2+3+4+5+6,

row = 10, col = 11 ------>数位和:1+0+1+1 = 3

cpp 复制代码
#include <vector>
class Solution {
public:
    int movingCount(int threshold, int rows, int cols) {
        if(threshold < 0 || rows <= 0 || cols <= 0){
            return 0;
        }

        vector<vector<bool>> visited(rows, vector<bool> (cols, false));

        int count = movingCountCore(threshold, rows, cols, 0, 0, visited);
        return count;
    }
    //数位之和
    int getDigitSum(int number){ //row = 10, column = 11, 数位之和sum = 3
        int sum = 0;
        while(number>0){
            sum += number%10;
            number /= 10;
        }
        return sum;
    }
    int movingCountCore(int threshold,int rows, int cols, int row, int column, vector<vector<bool>> &visited){
        
        if(row < 0 ||row >= rows ||
         column <0 || column >= cols||
         getDigitSum(row) + getDigitSum(column) > threshold //数位之和
        //  row + column > threshold //row < 10, column < 10这种情况是可以的, 
                                    //row=10,column = 10的时候,数位之和 sum = 2
         || visited[row][column]   //true表示已访问
         ) return false;

         visited[row][column] = true;
                //往四个方向dfs
        return 1+movingCountCore(threshold, rows, cols, row+1, column, visited)+ 
                movingCountCore(threshold, rows, cols, row-1, column, visited)+
                movingCountCore(threshold, rows, cols, row, column+1, visited)+
                movingCountCore(threshold, rows-1, cols, row, column-1, visited);     
    }
};
相关推荐
pluviophile_s23 分钟前
数据结构:第2讲:线性表
数据结构·笔记
(●—●)橘子……36 分钟前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科2 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
feng_you_ying_li2 小时前
C++复习二,继承与多态
c++
小小de风呀2 小时前
de风——【从零开始学C++】(十一):list的基本使用和模拟实现
开发语言·c++·list
KaMeidebaby3 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
陌路203 小时前
C++高级进阶--夯实进阶基础(1)
开发语言·c++
无限码力3 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
Love_云宝儿4 小时前
WKT数据示例并与GeoJSON数据对比
数据结构·gis
BlockWay4 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft