---
# System prepended metadata

title: 0661. Image Smoother
tags: [Leetcode, FaceBook, Easy]

---

# 0661. Image Smoother
###### tags: `Leetcode` `FaceBook` `Easy`
Link: https://leetcode.com/problems/image-smoother/
## 思路 $O(MN)$ $O(1)$
这题不需要用PrefixSum是因为需要求和的只有9个数，跟输入长度无关
由于最大值是256，占8个bit，we can use the middle 8-bit to store the new state (average value), replace the old state with the new state by shifting all values 8 bits to the right.
0xFF是16进制里的11111111
a |= b是a = a||b
a &= b是a = a&b

## Code
```java=
class Solution {
    int[][] directions = new int[][]{{1,-1},{1,0},{1,1},{0,-1},{0,0},{0,1},{-1,-1},{-1,0},{-1,1}};
    public int[][] imageSmoother(int[][] img) {
        for(int i = 0;i < img.length;i++){
            for(int j = 0;j < img[0].length;j++){
                int sum = 0;
                int count = 0;
                for(int k = 0;k < directions.length;k++){
                    int newi = i+directions[k][0];
                    int newj = j+directions[k][1];
                    if(newi>=0 && newi<img.length && newj>=0 && newj<img[0].length){
                        sum += img[newi][newj] & 0xFF;
                        count++;
                    }
                }
                img[i][j] |= (sum/count)<<8;
            }
        }
        for(int i = 0;i < img.length;i++){
            for(int j = 0;j < img[0].length;j++){
                img[i][j] = img[i][j]>> 8;
            }
        }
        return img;
    }
}
```