Python Version:
def figureEnderGravity(matrix): if not matrix or not matrix[0]: return matrix m, n = len(matrix), len(matrix[0]) minstep = sys.maxsize for j in range(n): i = 0 while i < m: while i < m and matrix[i][j] != 'F': i += 1 if i == m: continue while i < m and matrix[i][j] == 'F': i += 1 if i < m: cnt = 0 while i < m and matrix[i][j] != '#': i += 1 cnt += 1 minstep = min(minstep, cnt) if minstep == sys.maxsize or minstep == 0: return matrix for i in range(m-1, minstep-1, -1): for j in range(n): if matrix[i-minstep][j] == 'F': matrix[i][j] = 'F' matrix[i-minstep][j] = '.' return matrixJava version
public char[][] figureUnderGravity(char[][] matrix) { if (matrix == null || matrix.lenght == 0 || matrix[0].length == 0) { return matrix; } int m = matrix.length; int n = matrix[0].length; int minstep = Integer.MAX_VALUE; for (int j = 0; j < n; j++) { int i = 0; while (i < m) { while (i < m && matrix[i][j] != 'F') { i++; } if (i == m) continue; while (i < m && matrix[i][j] == 'F') { i++; } if (i < m) { int cnt = 0; while (i < m && matrix[i][j] != '#') { i++; cnt++; } minstep = Math.min(minstep, cnt); } } } if (minstep == Integer.MAX_VALUE || minstep == 0) { return matrix; } for (int i = m - 1; i < minstep; i--) { for (int j = 0; j < n; j++) { if (matrix[i - minstep][j] == 'F') { matrix[i][j] = 'F'; matrix[i - minstep][j] = '.'; } } } reutrn matrix; }