1706. 球会落何处(模拟算法)

1706. 球会落何处(模拟算法)
![题目详细.png](https://data.zdw666.fun/api/documents/articlePicture/11739610069652234.png) #### 审题 对于小球是否能继续向下走取决于两边的挡板**是否是同方向**,并且n为1时是肯定下不去的。基于这种想法可以有两种方向解题。 1、dfs搜索 2、模拟 我再来看数据范围 ![屏幕截图 20250215 170630.png](https://data.zdw666.fun/api/documents/articlePicture/1173961039892794.png) 如果用dfs则需要注意是否超时,比较麻烦。所以我们选择模拟 #### 解题 1、当两边挡板均向右时,小球通过,小球起步点位置s加一,走过行数加一 2、当两边挡板均向左时,小球通过,小球起步点位置s减一,走过行数加一 3、遍历全部行后,去比较走过行数和总行数是否相等即可,不相等则不通过,相等则通过,且出来那一列对应坐标为s。 **注意:向左向右均不能过界** #### 代码 思路捋清楚了,就可以撸代码了。 ```c++ class Solution { public: vector<int> findBall(vector<vector<int>>& grid) { int n = grid[0].size(); int m = grid.size(); vector<int>ans; for(int i=0;i<n;i++){ int s=i;//球的起点 int count=0;//走过行数 for(int j=0;j<m;j++){ if(grid[j][s]==1&&s<n-1&&grid[j][s+1]==1){count++;s++;continue;} if(grid[j][s]==-1&&n!=1&&s-1>=0&&grid[j][s-1]==-1){count++;s--;continue;} } if(count==m)ans.push_back(s); else ans.push_back(-1); } return ans; } }; ``` 结果不出所料,直接秒杀了。 ![屏幕截图 20250215 171523.png](https://data.zdw666.fun/api/documents/articlePicture/11739610931203398.png) #### 完结撒花 哈哈,至此我们解决了今天的每日一题。 我的力扣主页:[https://leetcode.cn/u/nan-wan-bu-qiu-39/](https://leetcode.cn/u/nan-wan-bu-qiu-39/)