受限需要设置一个转换函数,把给定的box调转90度。随后基于调转后的newbox来进行操作。从每一列的最后一位往上遍历。设置一个dropto的变量,用于记录石头可以掉下的最低位置,当遇到障碍物时,dropto一定在这个障碍物的上一个位置之上,如果遇到石头,则将这个位置改为空,并且将最新的dropto的位置填上石头,并将dropto的位置上移一位,标志将其移动到了新落位的石头的位置之上。
class Solution:
def rotateTheBox(self, box: List[List[str]]) -> List[List[str]]:
stone = "#"
obstacle = "*"
Empty = "."
newbox = self.reverse(box)
row = len(newbox)
col = len(newbox[0])
for i in range(col):
j = row - 1
dropto = j
while j >= 0:
curpos = newbox[j][i]
if curpos == stone:
newbox[j][i] = Empty
newbox[dropto][i] = stone
dropto -= 1
elif curpos == obstacle:
dropto = j - 1
j -= 1
return newbox
def reverse(self, box):
col = len(box)
row = len(box[0])
newbox = []
for i in range(row):
newrow = []
for j in range(col):
newrow.append(box[j][i])
newrow = newrow[::-1]
newbox.append(newrow)
return newbox