🔗 leetcode.com/problems/ro…
题目
- 给一个 m * n 的二维数组,# 代表花,* 代表墙
- 二维数组顺时针旋转 90 度,# 会根据重力下落,要么到 * 被挡住,要么到底被挡住
- 返回经过旋转后的二维数组
思路
- M * N 数组,经过旋转之后 [i, j] 会变成 [j][m - i -1]
- solution 1 是先进行重力处理,把 # 往右移动,直到碰到 * 或者到底。这里有两种处理方式,一种是遍历,另外一种是记录当前可填充 # 的位置
- solution 2 时边重力处理,边重力处理 #,记录当前可填充 # 的位置,性能较优
代码
class Solution {
public:
vector<vector<char>> rotateTheBox(vector<vector<char>>& box) {
int m = box.size(), n = box[0].size()
/* gravity 1
for (int i = 0
for (int j = n - 2
if (box[i][j] == '
int k = j
while (k < n - 1 && box[i][k + 1] == '.') {
k++
}
if (k > j) {
box[i][k] = '
box[i][j] = '.'
}
}
}
}*/
// gravity 2
for (int i = 0
int bottom = n -1
for (int j = n - 1
if (box[i][j] == '
box[i][bottom] = '
if (j != bottom) box[i][j] = '.'
bottom--
} else if (box[i][j] == '*') bottom = j - 1
}
}
// rotated
vector<vector<char>> ans
for (int i = 0
vector<char> tmp
for (int j = 0
tmp.push_back(box[m - j -1][i])
}
ans.push_back(tmp)
}
return ans
}
}