一开始把行列搞反了。
中间debug出现问题,就...生打补丁。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> ans = new ArrayList<>();
        int i = 0, j = 0, m = 0, n = 0;
        m = matrix.length;
        if(m == 0)  return ans;
        n = matrix[0].length;
        int cnt = 0;
        
        int rightBorder = n - 1;
        int leftBorder = 0;
        int bottomBorder = m - 1;
        int topBorder = 0;

       
        while(cnt < m * n){
            // right
            while(j <= rightBorder){
                ans.add(matrix[topBorder][j]);
                j++;
                cnt++;
            }
            j--;
            i++;
            topBorder++;
            
            if(cnt >= m * n)  break;

            // down
            while(i <= bottomBorder){
                ans.add(matrix[i][rightBorder]);
                i++;
                cnt++;
            }
            i--;
            j--;
            rightBorder--;
            if(cnt >= m * n)  break;
            
            // left
            while(j >= leftBorder){
                ans.add(matrix[bottomBorder][j]);
                j--;
                cnt++;
            }
            j++;
            i--;
            bottomBorder--;
            if(cnt >= m * n)  break;

            // up
            while(i >= topBorder){
                ans.add(matrix[i][leftBorder]);
                i--;
                cnt++;
            }
            i++;
            j++;
            leftBorder++;
        }
        return ans;
    }
}