这道题因为有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]);
    }      
};

 

posted on 2018-09-29 14:27  Sempron2800+  阅读(145)  评论(0编辑  收藏  举报