[編號][0][刷題][LeetCode][簡單][661.圖片平滑器]
阿新 • • 發佈:2022-03-24
影象平滑器 是大小為 3 x 3 的過濾器,用於對影象的每個單元格平滑處理,平滑處理後單元格的值為該單元格的平均灰度。
每個單元格的 平均灰度 定義為:該單元格自身及其周圍的 8 個單元格的平均值,結果需向下取整。(即,需要計算藍色平滑器中 9 個單元格的平均值)。
如果一個單元格周圍存在單元格缺失的情況,則計算平均灰度時不考慮缺失的單元格(即,需要計算紅色平滑器中 4 個單元格的平均值)。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/image-smoother
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
我的最終程式碼:
class Solution { private: const int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int n=img.size();int m=img[0].size(); vector<vector<int>> ans(n,vector<int>(m)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int val=img[i][j]; int num=9; for(int d=0;d<8;d++) { if(i+dir[d][0]>=0&&i+dir[d][0]<n&&j+dir[d][1]>=0&&j+dir[d][1]<m) { val+=img[i+dir[d][0]][j+dir[d][1]]; } else num--; } ans[i][j]=val/num; } } return ans; } };
我的錯誤程式碼,及原因分析:
class Solution { private: const int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int n=img.size();int m=img[0].size(); vector<vector<int>> ans(n,vector<int>(m)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int val=img[i][j]; int n=9; for(int d=0;d<8;d++) { if(i+dir[d][0]>=0&&i+dir[d][0]<n&&j+dir[d][1]>=0&&j+dir[d][1]<m) { val+=img[i+dir[d][0]][j+dir[d][1]]; } else {n--;} } ans[i][j]=val/n; } } return ans; } }; //在這裡有錯誤,雖然小而傻但是要重視。 //錯誤間接因素1.習慣性用n,m定義高,寬, //錯誤間接因素2.習慣性用n 定義當前計數; //導致錯誤:n變數被定義兩次,但自己很難發現,部分編譯器甚至不報錯。犯的錯誤
Leetcode官方解答程式碼:
class Solution { public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int m = img.size(), n = img[0].size(); vector<vector<int>> ret(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { int num = 0, sum = 0; for (int x = i - 1; x <= i + 1; x++) { for (int y = j - 1; y <= j + 1; y++) { if (x >= 0 && x < m && y >= 0 && y < n) { num++; sum += img[x][y]; } } } ret[i][j] = sum / num; } } return ret; } }; 作者:LeetCode-Solution 連結:https://leetcode-cn.com/problems/image-smoother/solution/tu-pian-ping-hua-qi-by-leetcode-solution-9oi5/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。官方程式碼
總結:定義變數謹防重複定義。
搜尋
複製