Что ж, всегда полезно передавать значение по ссылке всякий раз, когда вы можете, потому что с большим вектором создание копии может быть разницей между принятием кода или отклонением 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
Вы можете заметить разницу ?