Leetcode每日一题 —— 1861. 旋转盒子

力扣 LeetCode 1861. 旋转盒子 - 力扣(LeetCode) 1861. 旋转盒子 - 给你一个 m x n 的字符矩阵 boxGrid ,它表示一个箱子的侧视图。箱子的每一个格子可能为: * '#' 表示石头 * '*' 表示固定的障碍物 * '.' 表示空位置 这个箱子被 顺时针旋...
Leetcode每日一题 —— 1861. 旋转盒子
Leetcode每日一题 —— 1861. 旋转盒子
力扣 LeetCode

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 位参与者

阅读完整话题

来源: linux.do查看原文