leetcode (Image Smoother)
阿新 • • 發佈:2018-12-01
Title:Image Smoother 661
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/image-smoother/
1. 注意有些數的周圍沒有8個數(3個或者5個的)
時間複雜度:O(n^2),巢狀for迴圈。
空間複雜度:O(1),沒有申請額外的空間。
/** * 注意有些數的周圍沒有8個數 * @param M * @return */ public static int[][] imageSmoother(int[][] M) { if (M == null) { return M; } int row = M.length; if (row == 0) { return new int[0][]; } int column = M[0].length; int result[][] = new int[row][column]; for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { result[i][j] = average(M, i, j, row, column); } } return result; } private static int average(int[][] M, int i, int j, int row, int column) { int sum = M[i][j]; int count = 1; if (i - 1 >= 0 && j - 1 >= 0) { sum += M[i - 1][j - 1]; count++; } if (i - 1 >= 0) { sum += M[i - 1][j]; count++; } if (i - 1 >= 0 && j + 1 < column) { sum += M[i - 1][j + 1]; count++; } if (j - 1 >= 0) { sum += M[i][j - 1]; count++; } if (j + 1 < column) { sum += M[i][j + 1]; count++; } if (i + 1 < row && j - 1 >= 0) { sum += M[i + 1][j - 1]; count++; } if (i + 1 < row) { sum += M[i + 1][j]; count++; } if (i + 1 < row && j + 1 < column) { sum += M[i + 1][j + 1]; count++; } return sum / count; }