1861. 旋转盒子Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个 m x n 的字符矩阵 boxGrid ,它表示一个箱子的侧视图。箱子的每一个格子可能为:
'#' 表示石头 '*' 表示固定的障碍物 '.' 表示空位置 这个箱子被 顺时针旋转 90 度 ,由于重力原因,部分石头的位置会发生改变。每个石头会垂直掉落,直到它遇到障碍物,另一个石头或者箱子的底部。重力 不会 影响障碍物的位置,同时箱子旋转不会产生惯性 ,也就是说石头的水平位置不会发生改变。
题目保证初始时 boxGrid 中的石头要么在一个障碍物上,要么在另一个石头上,要么在箱子的底部。
请你返回一个 n x m 的矩阵,表示按照上述旋转后,箱子内的结果。
示例 1:

输入:box = [["#",".","#"]]
输出:[["."],
["#"],
["#"]]
示例 2:

输入:box = [["#",".","*","."],
["#","#","*","."]]
输出:[["#","."],
["#","#"],
["*","*"],
[".","."]]
示例 3:
输入:box = [["#","#","",".","","."],
["#","#","#","",".","."],
["#","#","#",".","#","."]]
输出:[[".","#","#"],
[".","#","#"],
["#","#",""],
["#","","."],
["#",".",""],
["#",".","."]]
提示:
- m == boxGrid.length
- n == boxGrid[i].length
- 1 <= m, n <= 500
- boxGrid[i][j] 只可能是 '#' ,'*' 或者 '.' 。
# 思路
char[][] ans = new char[m][n]
# 解法
class Solution {
public char[][] rotateTheBox(char[][] box) {
int n = box.length, m = box[0].length;
char[][] ans = new char[m][n];
for(int i=0; i<n; i++){
for(int j=0 ;j<m ;j++){
ans[j][n-1-i] = box[i][j];
}
}
for(int i=0; i<n; i++){
int start = m-1;
for(int j=m-1; j>=0; j--){
if(ans[j][i] == '#'){
ans[j][i] = '.';
ans[start--][i] = '#';
}else if(ans[j][i] == '*'){
start = j-1;
}
}
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 总结
- 分析出几种情况,然后分别对各个情况实现