封面

1861. 旋转盒子

写作时间:2026-05-06 23:33
# 力扣算法专题
# 每日一题系列

1861. 旋转盒子 - 力扣(LeetCode)

条件约束为:

  • #会下移
  • *是固定的
  • 整体旋转90度,返回旋转后的矩阵

思路:

  • 旋转90度(i,j)→(j,n-i-1)
  • 重力下落部分:利用cnt记录#的数目,直到到该列底部或者碰到*,将上面改为#
class Solution {
    public char[][] rotateTheBox(char[][] boxGrid) {
        int n = boxGrid.length, m = boxGrid[0].length;
        //(i,j)->(j,n-i-1)
        char[][] res = new char[m][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                res[j][n-i-1] = boxGrid[i][j];
            }
        }
        //纵坐标向下移动,
        for (int i = 0; i < n; i++) {
            int count = 0;
            for (int j = 0; j < m; j++) {
                if (res[j][i] == '*') {
                    while (count > 0) {
                        res[j - count][i] = '#';
                        count--;
                    }
                } else if (res[j][i] == '#') {
                    count++;
                    res[j][i] = '.';
                }
            }
            while (count > 0) {
                res[m - count][i] = '#';
                count--;
            }
        }
        return res;
    }
}