题目地址:
https://leetcode.com/problems/rotating-the-box/
给定一个
m
×
n
m\times n
m×n的矩阵,每个位置有三种可能: #
代表石头,.
代表空洞,*
代表障碍物。现在将这个矩阵顺时针旋转
90
°
90\degree
90°,自然状态下石头会下落,直到最后一行或者碰到障碍物。问最后自然状态下的矩阵是什么样。
首先开一个新矩阵,先用空地填充。翻转之后,原矩阵的最后一列即为新矩阵的最后一行,我们对原矩阵每一行从右向左遍历,如果遇到障碍物则原样填;如果遇到石头,我们将石头填充到最下面可能的位置。代码如下:
class Solution {
public:
vector<vector<char>> rotateTheBox(vector<vector<char>>& g) {
int m = g.size(), n = g[0].size();
vector<vector<char>> res(n, vector<char>(m, '.'));
for (int i = 0; i < m; i++)
for (int j = n - 1, idx = j; j >= 0; j--) {
if (g[i][j] == '*') {
res[j][m - 1 - i] = '*';
idx = j - 1;
} else if (g[i][j] == '#') res[idx--][m - 1 - i] = '#';
}
return res;
}
};
时间复杂度 O ( m n ) O(mn) O(mn),空间 O ( 1 ) O(1) O(1)。