今天看完这个题目其实一开始我是懵逼的,有点茫然,但是仔细一想其实也就是找到每一行每一列的最大值,然后我又想,那要是每一行的列数不一致,便利数组时岂不是很容易越界?然后我一看输入范围,好家伙,行数等于列数等于n,这可就太简单辣,那我直接定义三个变量分别记录顶部左部前部投影面积,定义两个变量去记录当前遍历的行和列的最大值,遍历一次求个和不就完事了,代码如下
class Solution
{
public:
int projectionArea(vector<vector<int>>& grid)
{
int n = grid.size();
int top = 0, right = 0, front = 0;
int rightMax = 0, frontMax = 0;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (grid[i][j] != 0)
{
top++;
}
rightMax = max(rightMax, grid[i][j]);
frontMax = max(frontMax, grid[j][i]);
}
right += rightMax;
front += frontMax;
rightMax = 0;
frontMax = 0;
}
return top + right + front;
}
};
需要注意的是要获取当前行或列的最大值必须要完整地遍历某一行或列中间不能间断,由于这道题行列数相等,可以通过直接改变i和j的位置来同时遍历行和列