这道题因为有0的情况,因此不能使用投影的方法,需要遍历每一个元素,单独处理。
class Solution { public: int surfaceArea(vector<vector<int>>& grid) { int x=0; int sum=0; for(int i=0;i<grid.size();i++) for(int j=0;j<grid[0].size();j++){ if(grid[i][j]!=0) x+=1; } for(int i=0;i<grid.size();i++) for(int j=0;j<grid[0].size();j++){ sum+=(grid[i][j]*4-2*cal(grid,i,j)); } sum+=2*x; return sum; } int cal(vector<vector<int>>a,int i,int j){ if(i==0&&j==0) return 0; else if(i==0&&j!=0) return min(a[i][j-1],a[i][j]); else if(i!=0&&j==0) return min(a[i-1][j],a[i][j]); else return min(a[i][j-1],a[i][j])+min(a[i-1][j],a[i][j]); } };