Leetcode 剑指 Offer 13. 机器人的运动范围 (每日一题 20210906)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 剑指 Offer 13. 机器人的运动范围 (每日一题 20210906)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
地上有一個m行n列的方格,從坐標 [0,0] 到坐標 [m-1,n-1] 。一個機器人從坐標 [0, 0] 的格子開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行坐標和列坐標的數位之和大于k的格子。例如,當k為18時,機器人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機器人能夠到達多少個格子?示例 1:輸入:m = 2, n = 3, k = 1
輸出:3
示例 2:輸入:m = 3, n = 1, k = 0
輸出:1
提示:1 <= n,m <= 100
0 <= k?<= 20鏈接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcofclass Solution:def movingCount(self, m: int, n: int, k: int) -> int:# visited = [[1] * n for _ in range(m)]# for i in range(m):# for j in range(n):# if i // 10 + i % 10 + j // 10 + j % 10 <= k:# visited[i][j] = 0# def dfs(x, y):# if x < 0 or x >= m or y < 0 or y >= n or visited[x][y]:# return 0# visited[x][y] = 1# return 1 + dfs(x, y+1) + dfs(x+1, y)# return dfs(0, 0)visited = [[1] * n for _ in range(m)]for i in range(m):for j in range(n):if i // 10 + i % 10 + j // 10 + j % 10 <= k:visited[i][j] = 0queue = collections.deque([(0,0)])res = 0while queue:x, y = queue.popleft()res += 1for dx, dy in ((1,0),(0,1)):nx, ny = x + dx, y + dyif 0 <= nx <m and 0 <= ny < n and not visited[nx][ny]:visited[nx][ny] = 1queue.append((nx, ny))return res
總結
以上是生活随笔為你收集整理的Leetcode 剑指 Offer 13. 机器人的运动范围 (每日一题 20210906)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 63. 不同路径 II
- 下一篇: Leetcode 74. 搜索二维矩阵