以下是使用Python解决Lintcode 3646 '计算环形街道上的房屋数量' 的解法:pythonclass Street: def init(self, houses): self.houses = houses self.current_house = 0 def openDoor(self): self.houses[self.current_house] = True def closeDoor(self): self.houses[self.current_house] = False def isDoorOpen(self): return self.houses[self.current_house] def moveRight(self): self.current_house = (self.current_house + 1) % len(self.houses) def moveLeft(self): self.current_house = (self.current_house - 1) % len(self.houses)

def countHouses(houses): street = Street(houses) count = 0 for i in range(len(houses)): if not street.isDoorOpen(): count += 1 street.moveRight() return count

**使用示例:**pythonhouses = [False, True, False, True, True]print(countHouses(houses)) # 输出: 3

解法说明:

  1. 创建Street类: 模拟环形街道,包含房屋状态和移动方法。2. 遍历房屋:countHouses函数中,利用Street类遍历每座房屋。3. 计数: 如果房屋门是关闭的 (not street.isDoorOpen()),则计数器加一。4. 返回结果: 遍历结束后,返回计数器的值,即关闭的房屋数量。

关键点:

  • 取模运算: moveRightmoveLeft 方法使用取模运算 % 来实现环形移动,确保在边界处正确跳转。* 模拟: 通过 Street 类模拟街道和房屋,使代码更易理解和维护。

原文地址: https://www.cveoy.top/t/topic/fSC9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录