leetcode_Spiral Matrix

描述:

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

思路:

这题看起来是很复杂,做起来也确实挺复杂的。但是呢,这题并不是非常非常难,只是控制逻辑让人很抓狂罢了。

colStart,colEnd,rowStart,rowEnd,num=0

1.colStart<colEnd  输出arr[row][colStart]~arr[row][colEnd-1]的值

2.rowStart<rowEnd 输出arr[col][rowStart]~ar[col][rowEnd-1]的值

3.colEnd>colStart 输出arr[rowLen-1-row][colEnd]~arr[rowLen-1-row][colStart+1]的值

4.rowEnd>rowStart 输出arr[colLen-1-col][rowEnd]~arr[colLen-1-col][rowStart+1]的值


代码:

public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer>list=new ArrayList<Integer>();
        if(matrix==null||matrix.length==0)
        	return list;
        int rows=matrix.length,cols=matrix[0].length;
        if(rows==1)
        {
        	for(int num:matrix[0])
        		list.add(num);
        	return list;
        }else if(matrix[0].length==1)
        {
        	for(int i=0;i<rows;i++)
        		list.add(matrix[i][0]);
        	return list;
        }
        int x=0,y=0;
        while(x<cols-x&&y<rows-y)
        {
        	int end=cols-x-1;
        	if(x<end)
        	{
        		for(int i=x;i<end;i++)
            		list.add(matrix[y][i]);
        	}
        	
        	end=rows-y-1;
        	if(y<end)
        	{
        		for(int j=y;j<end;j++)
            		list.add(matrix[j][cols-x-1]);
        	}
        	int start=cols-x-1;
        	if(start>x)
        	{
        		for(int i=start;i>x;i--)
            		list.add(matrix[rows-y-1][i]);
        	}
        	start=rows-y-1;
        	if(start>y)
        	{
        		for(int j=start;j>y;j--)
            		list.add(matrix[j][x]);
        	}
        	if(2*x+1==cols&&2*y+1==rows)
        		list.add(matrix[y][x]);
        	x++;
        	y++;
        }
        return list;
    }


你可能感兴趣的:(Matrix,Spiral)