Что ж, всегда полезно передавать значение по ссылке всякий раз, когда вы можете, потому что с большим вектором создание копии может быть разницей между принятием кода или отклонением OJ. то есть ваш код будет таким же, просто вызов по ссылке имеет все значение.



CODE 1:
class Solution {
public:
    bool block(vector<vector<int>> grid,int row,int col){
        return (row<0 || row>=grid.size() || col >=grid[0].size() || col<0 )?false:true;
    }
    vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
        vector<vector<int>> res;
        int row=M.size();
        if(!row)
            return res;
        int col=M[0].size();
        res=vector<vector<int>>(row,vector<int>(col,0));
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                int pos=0;
                int total=0;
                for(int k=-1;k<=1;k++){
                    for(int l=-1;l<=1;l++){
                        if(block(M,i+k,j+l)){
                            pos++;
                            total+=M[i+k][j+l];
                        }
                    }
                }
                res[i][j]=total/pos;
                //std::cout<<pos<<" "<<total<<" "<<(total/pos)<<endl;
            }
        }
        return res;
    }
};
//This was the code that was rejected by leetcode
//CODE 2:
class Solution {
public:
    bool block(vector<vector<int>> &grid,int row,int col){
        return !(row<0 || row>=grid.size() || col >=grid[0].size() || col<0 );
    }
    vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
        vector<vector<int>> res;
        int row=M.size();
        if(!row)
            return res;
        int col=M[0].size();
        res=vector<vector<int>>(row,vector<int>(col,0));
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                int pos=0;
                int total=0;
                for(int k=-1;k<=1;k++){
                    for(int l=-1;l<=1;l++){
                        if(block(M,i+k,j+l)){
                            pos++;
                            total+=M[i+k][j+l];
                        }
                    }
                }
                res[i][j]=total/pos;
                //std::cout<<pos<<" "<<total<<" "<<(total/pos)<<endl;
            }
        }
        return res;
    }
};
//This was accepted Solution

Вы можете заметить разницу ?