044 Figure Under Gravity

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 matrix
Java 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;
}

浙公网安备 33010602011771号