具体思路:
模拟问题,直接按每一列模拟就行;
具体代码:
class Solution {
public:
vector<int> findBall(vector<vector<int>>& grid) {
vector<int>ret;
int m=grid.size();
int n=grid[0].size();
set<int>se;
for(int i=0;i<m;i++){
for(int j=1;j<n;j++){
if(grid[i][j-1]==1&&grid[i][j]==-1){
se.insert(i*n+j-1);
se.insert(i*n+j);
}
}
}
for(int i=0;i<n;i++){
int row=0,col=i;
bool flag=false;
for(int j=0;j<m;j++){
if(col>=n||col<0||se.find(row*n+col)!=se.end()){
//如果出现了不可达地方;
flag=true;
break;
}
if(grid[row][col]==1)
col++;
else
col--;
row++;
}
if(col>=n||col<0||flag){
ret.push_back(-1);
continue;
}
ret.push_back(col);
}
return ret;
}
};