1861. 旋转盒子 - 力扣(LeetCode)
1861. 旋转盒子 - 给你一个 m x n 的字符矩阵 boxGrid ,它表示一个箱子的侧视图。箱子的每一个格子可能为: * '#' 表示石头 * '*' 表示固定的障碍物 * '.' 表示空位置 这个箱子被 顺时针旋转 90 度 ,由于重力原因,部分石头的位置会发生改变。每个石头会垂直掉落,直到它遇到障碍物,另一个石头或者箱子的底部。重力...
佬友五一快乐~~
思路
简单题简单做,遍历每一行,从右往左,找到旋转后当前阶段的底部,遇到石头就落到底部,遇到障碍物就更新底部。
代码
class Solution {
public char[][] rotateTheBox(char[][] boxGrid) {
int m = boxGrid.length;
int n = boxGrid[0].length;
char[][] ans = new char[n][m];
// 遍历每一行
for (int i = 0; i < m; i++) {
// 当前阶段的底部
int bottom = n - 1;
for (int j = n - 1; j >= 0; j--) {
if (boxGrid[i][j] == '#') {
// 遇到石头,石头掉落到底部,底部升高1
ans[bottom][m - 1 - i] = '#';
bottom--;
} else if (boxGrid[i][j] == '*') {
// 遇到障碍物,底部升高到障碍物上面
ans[j][m - 1 - i] = '*';
// 中间空的位置填上 “.”
for (int k = bottom; k > j; k--) {
ans[k][m - 1 - i] = '.';
}
bottom = j - 1;
}
}
// 空的位置补上 “.”
for (int k = bottom; k >= 0; k--) {
ans[k][m - 1 - i] = '.';
}
}
return ans;
}
}
1 个帖子 - 1 位参与者