题目链接
https://leetcode-cn.com/problems/where-will-the-ball-fall/
解题思路
- 动态规划
- 后一行等于前一行的位置+grid[i][j]
- 需要考虑啥时候会卡住
- 卡住的时候置-1
- 去最后一行为结果。
代码
class Solution {
public:
vector<int> findBall(vector<vector<int>>& grid) {
int row = grid.size();
int col = grid[0].size();
vector<int> ans(col, 0);
// 默认位置
for (int i = 0; i < col; i++) {
ans[i] = i;
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (ans[j] == -1) {//忽略卡住的球
continue;
}
if (grid[i][ans[j]] == 1 && ans[j] + 1 < col && grid[i][ans[j] + 1] == 1) {
//右移
ans[j]++;
} else if (grid[i][ans[j]] == -1 && ans[j] - 1 >= 0 && grid[i][ans[j] - 1] == -1) {
//左移
ans[j]--;
} else {
//卡住
ans[j] = -1;
}
}
}
return ans;
}
};