Thursday, January 29, 2015

Spiral Matrix LeetCode

Pay attention to the index and the break condition.


public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<Integer>();
        if (matrix== null || matrix.length==0 || matrix[0].length==0) return res;
        
        int width = matrix[0].length;
        int height = matrix.length;
        
        for (int i=0; i<(Math.min(width, height) + 1)/2; i++) {
            for (int j=i; j<width-i; j++) {
                res.add(matrix[i][j]);
            }
            for (int j=i+1; j<height-i; j++) {
                res.add(matrix[j][width-i-1]);
            }
            
            if (height - i - 1 == i) break;
            for (int j=width-i-2; j>=i; j--) {
                res.add(matrix[height-i-1][j]);
            }
            
            if (width - i - 1 == i) break;
            for (int j = height-i-2; j>=i+1; j--) {
                res.add(matrix[j][i]);
            }
        }
        return res;
    }

No comments:

Post a Comment