题目描述:
题解:
参考519. leetcode题目讲解(Python):随机翻转矩阵(Random Flip Matrix ) - 简书
此题的关键不在于记录数组中对应位置的值,而是记录哪些位置被从0翻转为1,然后从剩余位置中随机选择一个位置,本来想用二维数组分别记录row col坐标。
1.init函数中,创建一个flipped set,记录被翻转过的位置,start初始化为0,end初始化为rows*cols-1,表示可选的位置范围。
2.flip函数中,从start-end随机选取一个position,如果position不在flipped中,则可选,分别返回position除以cols的商值和余数,即为行号和列号。
3.reset函数中,将flipped清空即可。
class Solution: def __init__(self, n_rows, n_cols): self.cols = n_cols self.fliped = set() self.start = 0 self.end = n_rows * n_cols-1 def flip(self): while True: position = random.randint(self.start,self.end) if position not in self.fliped: self.fliped.add(position) return divmod(position,self.cols) def reset(self): """ :rtype: void """ self.fliped = set()