2
public int maxTrailingZeros(int[][] grid) {4
int n = grid[0].length;5
int[][] two = new int[m][n];6
int[][] five = new int[m][n];7
for (int i = 0; i < m; ++i) {8
for (int j = 0; j < n; ++j) {9
two[i][j] = getFactorNum(grid[i][j], 2);10
five[i][j] = getFactorNum(grid[i][j], 5);14
int[][] left2 = new int[m][n];15
int[][] left5 = new int[m][n];16
for (int i = 0; i < m; ++i) {19
for (int j = 0; j < n; ++j) {27
int[][] right2 = new int[m][n];28
int[][] right5 = new int[m][n];29
for (int i = 0; i < m; ++i) {32
for (int j = n - 1; j >= 0; --j) {40
int[][] up2 = new int[m][n];41
int[][] up5 = new int[m][n];42
for (int j = 0; j < n; ++j) {45
for (int i = 0; i < m; ++i) {53
int[][] down2 = new int[m][n];54
int[][] down5 = new int[m][n];55
for (int j = 0; j < n; ++j) {58
for (int i = m - 1; i >= 0; --i) {67
for (int i = 0; i < m; ++i) {68
for (int j = 0; j < n; ++j) {70
if (i != 0 || j != 0) {72
Math.min(left2[i][j] + up2[i][j] - two[i][j], left5[i][j] + up5[i][j] - five[i][j]);73
res = Math.max(res, cur);77
if (i != 0 || j != n - 1) {79
Math.min(right2[i][j] + up2[i][j] - two[i][j], right5[i][j] + up5[i][j] - five[i][j]);80
res = Math.max(res, cur);84
if (i != m - 1 || j != n - 1) {87
right2[i][j] + down2[i][j] - two[i][j], right5[i][j] + down5[i][j] - five[i][j]);88
res = Math.max(res, cur);92
if (i != m - 1 || j != 0) {95
left2[i][j] + down2[i][j] - two[i][j], left5[i][j] + down5[i][j] - five[i][j]);96
res = Math.max(res, cur);103
private int getFactorNum(int input, int factor) {105
while (input != 0 && input % factor == 0) {