题目:
分析:
模拟过程,再加一个记忆化搜索,别被题目吓住了。
代码:
class Solution {
public:
vector<vector<int> > vv;
vector<int> ans;
int f(int x,int m,vector<vector<int>>& grid)
{//处于x位置 m行
if(m==grid.size()) return x;
if(vv[m][x]!=-2) return vv[m][x];
if(x==0&&grid[m][x]==-1) return vv[m][x]=-1;
if(x==grid[0].size()-1&&grid[m][x]==1) return vv[m][x]=-1;
if(grid[m][x]==-1 && grid[m][x-1]==-1) vv[m][x]=f(x-1,m+1,grid);
else if(grid[m][x]==1 && grid[m][x+1]==1) vv[m][x]=f(x+1,m+1,grid);
else return vv[m][x]=-1;
return vv[m][x];
}
vector<int> findBall(vector<vector<int>>& grid) {
vector<int> v(grid[0].size(),-2);
for(int i=0;i<grid.size();i++) vv.push_back(v);
for(int i=0;i<grid[0].size();i++)
{
int c=f(i,0,grid);
ans.push_back(c);
}
return ans;
}
};