题解 | #机器人的运动范围# 递归+辅助vector
机器人的运动范围
https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
#include <vector>
class Solution {
public:
int res = 0;
void find_sum(vector<vector<int>>& loc, int threshold, int ro, int co){
if((ro>=0 && ro<loc.size()) && (co>=0&&co<loc[0].size()) && loc[ro][co] == 1){
return;
}else if(ro<0 || ro >= loc.size() ||co < 0 || co >= loc[0].size()){
// 处理出入超出数组界限的逻辑
return;
}
int tar = (ro/100 + (ro/10)%10 + (ro%10)) + (co/100 + (co/10)%10 + (co%10));
if(tar > threshold){
return;
}
res++;
loc[ro][co] = 1;
find_sum(loc, threshold, ro-1, co);
find_sum(loc, threshold, ro+1, co);
find_sum(loc, threshold, ro, co-1);
find_sum(loc, threshold, ro, co+1);
}
int movingCount(int threshold, int rows, int cols) {
vector<vector<int>> loc(rows, vector<int>(cols,0));
find_sum(loc, threshold, 0, 0);
return res;
}
};
递归的意义是在数学公式不明确的时候采用的一种穷举的方式,合适的递归逻辑可以考虑到所有可能发生的情况。
采用辅助数组的意义在于,递归的逻辑中需要参考以往递归的结果,这个逻辑一般是通过在递归函数的返回值上建立逻辑判断的,但是该题目情况特殊,所以采用辅助数组存储相关结论并建立判断逻辑。
查看29道真题和解析
