题目描述
思路分析
建立路径,模拟机器人路径,将可以到达的地方全部置为1,最后统计1的个数即可。
由于从左上角开始,因此每次向下向右移动即可。限制条件也可以少两个
代码展示
class Solution {
public:
bool arr[100][100] = {0};
int movingCount(int m, int n, int k) {
int sum = 0;
dfs(0, 0, m, n, k);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j] == 1) {
sum++;
}
}
}
return sum;
}
void dfs(int startrow, int startcol, int maxrow, int maxcol, int k) {
if (arr[startrow][startcol] == 1 || startrow >= maxrow || startcol >= maxcol || _get_sum(startcol,startrow) > k) {//条件不满足退出
return;
}
arr[startrow][startcol] = 1;
dfs(startrow+1, startcol, maxrow, maxcol, k);
dfs(startrow, startcol+1, maxrow, maxcol, k);
}
int _get_sum(int i, int j) {
int sum = 0;
while (i) {
sum += i % 10;
i /= 10;
}
while (j) {
sum += j % 10;
j /= 10;
}
return sum;
}
};
结果分析
时间复杂度 O(N)
空间复杂度 O(N)
时间上面,遍历数组,并且进行dfs
空间上,创建数组,并且函数调用栈占据空间。