Leetcode Note: Go - Image Smoother
Image Smoother - LeetCode
https://leetcode.com/problems/image-smoother/
- Go 言語で取り組んだメモ
所感
- 3 x 3 サイズのフィルターで、対象セルと周囲の 8 マスの平均値を切り捨てて、画像の各マスに適用を行う
- 端を対象とする場合は、存在するマスでの平均とする
- 画像のグレースケールを表す m x n 行列 img を指定すると、その各マスにスムーザーを適用した後の画像となる行列を return する
回答
Image Smoother - LeetCode
https://leetcode.com/problems/image-smoother/solution/
Go 44ms 100% solution - LeetCode Discuss
https://leetcode.com/problems/image-smoother/discuss/507195/Go-44ms-100-solution
func imageSmoother(M [][]int) [][]int {
processedImage := make([][]int, len(M))
for i := range processedImage {
processedImage[i] = make([]int, len(M[0]))
}
for i := range processedImage {
for j := range processedImage[i] {
processedImage[i][j] = average(M, i, j)
}
}
return processedImage
}
func average(M [][]int, i, j int) int {
count, summary := 0, 0
for m := i-1; m <= i+1; m++ {
for n := j-1; n <= j+1; n++ {
if v, exist := gray(M, m, n); exist {
count++
summary += v
}
}
}
return summary / count
}
func gray(M [][]int, i, j int) (int, bool) {
if i < 0 || i >= len(M) || j < 0 || j >= len(M[0]) {
return 0, false
}
return M[i][j], true
}