classSolution(object):defimageSmoother(self,M): R, C =len(M),len(M[0]) ans =[[0]* C for _ in M]for r inxrange(R):for c inxrange(C): count =0for nr in(r-1, r, r+1):for nc in(c-1, c, c+1):if0<= nr < R and0<= nc < C: ans[r][c]+= M[nr][nc] count +=1 ans[r][c]/= countreturn ans
Runtime: 636 ms, faster than 59.90% of Python online submissions for Image Smoother.
Memory Usage: 11.9 MB, less than 100.00% of Python online submissions for Image Smoother.
var imageSmoother = function(M) {
const m = M.length,
n = M[0].length
if (m === 0 || n === 0) {
return [
[]
]
}
const dirs = [
[0, 1],
[0, -1],
[1, 0],
[-1, 0],
[-1, -1],
[1, 1],
[-1, 1],
[1, -1],
]
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
let sum = M[i][j],
cnt = 1
for (let k = 0; k < dirs.length; k++) {
let x = i + dirs[k][0],
y = j + dirs[k][1]
if (x < 0 || x > m - 1 || y < 0 || y > n - 1) continue
sum += (M[x][y] & 0xff)
cnt++
}
M[i][j] |= ((sum / cnt) << 8)
}
}
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
M[i][j] >>= 8
}
}
return M
};