我有一个二维字符数组,其中所有数字,不包括一个*(如图片所示(两个示例))
我的任务是求和所有邻居整数(在示例1中,*的邻居为4,2,5,8,总和为4 + 2 + 5 + 8 = 19) 但在示例2中,*没有顶部邻居。
我的初始代码如下:
arr[i-1][j] + arr[i+1][j] + arr[i][j-1] + arr[i][j+1]
但是后来我了解到不存在像 a [0] [-1] 这样的情况。因此,您可以帮我解决我的问题
答案 0 :(得分:2)
您需要明确检查每一项。以下应该起作用:
bool inRange(int i, int j) {
const auto n = 4; // you need to set this somewhere, or pass it in
return (i >= 0) && (i < n) && (j >= 0) && (j < n);
}
auto sum = (inRange(i-1, j) ? arr[i-1][j] : 0)
+ (inRange(i+1, j) ? arr[i+1][j] : 0)
+ (inRange(i, j-1) ? arr[i][j-1] : 0)
+ (inRange(i, j+1) ? arr[i][j+1] : 0);
您可能会写得更简洁一些,但不仅需要检查-1,还需要检查3时的情况。
答案 1 :(得分:2)
可以使用多种解决方案来解决此问题,但是如果您希望避免每次都检查边界,可以将矩阵维数扩展为所需的1倍。这意味着如果您有一个数组:
1 * 4 7
8 9 2 3
5 1 2 4
4 3 6 5
实施为:
0 0 0 0 0 0
0 1 * 4 7 0
0 8 9 2 3 0
0 5 1 2 4 0
0 4 3 6 5 0
0 0 0 0 0 0
这样做甚至都不会影响您的总和。