题目描述:
给你一个 n x n 的二维数组 grid,它包含范围 [0, n2 - 1] 内的不重复元素。实现 neighborSum 类:
neighborSum(int [][]grid) 初始化对象。int adjacentSum(int value) 返回在 grid 中与 value 相邻的元素之和,相邻指的是与 value 在上、左、右或下的元素。int diagonalSum(int value) 返回在 grid 中与 value 对角线相邻的元素之和,对角线相邻指的是与 value 在左上、右上、左下或右下的元素
代码思路:
这个代码定义了一个名为 NeighborSum 的类,它用于计算在一个二维整数网格(grid)中,给定值的相邻元素和以及对角相邻元素和。以下是代码思路的详细解释:
总结:
- 这个类提供了一种方便的方法来计算一个二维整数网格中,给定值的相邻和对角相邻元素的和。
- 它使用了两个私有辅助方法来处理边界检查和索引查找,从而简化了主方法的逻辑。
-
class NeighborSum:
def __init__(self, grid: List[List[int]]):
self.grid = grid
self.row = len(grid)
self.col = len(grid[0])
def __getval(self, i, j):
if i < 0 or i >= self.row or j < 0 or j >= self.col:
return 0
return self.grid[i][j]
def __getij(self, val):
for i in range(self.row):
for j in range(self.col):
if self.grid[i][j] == val:
return i, j
def adjacentSum(self, value: int) -> int:
i, j = self.__getij(value)
return (
self.__getval(i - 1, j)
+ self.__getval(i + 1, j)
+ self.__getval(i, j - 1)
+ self.__getval(i, j + 1)
)
def diagonalSum(self, value: int) -> int:
i, j = self.__getij(value)
return (
self.__getval(i - 1, j - 1)
+ self.__getval(i + 1, j + 1)
+ self.__getval(i + 1, j - 1)
+ self.__getval(i - 1, j + 1)
)