链接:
https://leetcode-cn.com/problems/where-will-the-ball-fall/
描述:
代码:
class Solution {
public:
int DFS(vector<vector<int>>& grid,int i,int j)
{
int row = grid.size();
int col = grid[0].size();
if(i == row) return j;
if(grid[i][j] == 1)
{
if(j == col-1 || grid[i][j+1] == -1) return -1;
return DFS(grid,i+1,j+1);
}
else
{
if(j == 0 || grid[i][j-1] == 1) return -1;
return DFS(grid,i+1,j-1);
}
}
vector<int> findBall(vector<vector<int>>& grid) {
int row = grid.size();
int col = grid[0].size();
vector<int> ret(col,-1);//创建返回数组
for(int j = 0;j<col;++j)
{
ret[j] = DFS(grid,0,j);//对目标值进行改变
}
return ret;
}
};
代码分析:
当一个小球落在某个位置时
当当前位置是1时,那么他会想向右下移动,
如果他的右边也是1,那么他的下一层地址就是i+1,j+1
如果他的右边是-1或者是墙时,那么他就不会到达下一层
同理:
当当前位置是-1时,那么他会想向坐下移动
如果他的左边是-1,那么他的下一层地址就是i+1,j-1
如果他的左边是1,或者是墙时,那么他就不会到达下一层