Leetcode 661 Solution

This article provides solution to leetcode question 661 (image-smoother)

https://leetcode.com/problems/image-smoother

Solution

class Solution { public: int get_value(const vector<vector<int>>& M, int i, int j, int m, int n, int& cnt) { if (0 <= i && i < m && 0 <= j && j < n) { cnt += 1; return M[i][j]; } return 0; }
vector<vector<int>> imageSmoother(vector<vector<int>>& M) { int m = M.size(); if (m == 0) return M;
int n = M[0].size();
vector<vector<int>> res(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { int sum = 0; int cnt = 0;
sum += this->get_value(M, i, j, m, n, cnt); sum += this->get_value(M, i - 1, j, m, n, cnt); sum += this->get_value(M, i + 1, j, m, n, cnt); sum += this->get_value(M, i, j - 1, m, n, cnt); sum += this->get_value(M, i, j + 1, m, n, cnt); sum += this->get_value(M, i - 1, j - 1, m, n, cnt); sum += this->get_value(M, i - 1, j + 1, m, n, cnt); sum += this->get_value(M, i + 1, j - 1, m, n, cnt); sum += this->get_value(M, i + 1, j + 1, m, n, cnt);
res[i][j] = floor(sum * 1.0 / cnt); } }
return res; } };