LeetCode Spiral Matrix

题目:

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].

题意:

就是给定一个m * n的矩阵,然后按照顺时针的顺序依次把所有矩阵中的元素都输入到一个list中。此题,我想到的是采用一个方法,然后这个方法是按照顺时针的顺序来输入数字,并且每次调用这个方法即可。

  public List<Integer> spiralOrder(int[][] matrix)
	{
		List<Integer> list = new ArrayList<Integer>();
		if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
			return list;
 		int rowlength = matrix.length;
		int collength = matrix[0].length;
		int length = rowlength > collength ? collength : rowlength;   //选择长和宽中的比较小的那个
		int leng = length / 2; 
		int i = 0;
		for(i = 0; i <= leng; i++)
		{
			add(matrix,i,rowlength - i - 1,i,collength - 1 - i,list);
		}
		return list;
	}
	public void add(int[][] matrix,int rowstart,int rowend,int colstart,int colend,List<Integer> list)
	{
	    if(rowstart > rowend || colstart > colend)  //这个方法是用来按照从上到右边再到下边最后到左边的顺序来输入数字的方法
	       return;
		if(rowstart == rowend && colstart == colend)   //但要分好几种情况,比如如果只有一个元素了,那么就直接输入即可。
			list.add(matrix[rowstart][colstart]);
		else if(rowstart == rowend && colstart != colend)   //比如只有一行
		{
		    for(int i = colstart; i <= colend; i++)
		    {
		        list.add(matrix[rowstart][i]);
		    }
		}
		else if(rowstart != rowend && colstart == colend)   //只有一列了
		{
		    for(int j = rowstart; j <= rowend; j++)
		    {
		        list.add(matrix[j][colstart]);
		    }
		}
		  //以下就是一整块的情况
		else if(rowstart != rowend && colstart != colend)
		{   /<span style="font-family: Arial, Helvetica, sans-serif;">/上边</span>
		    for(int i = colstart; i <= colend; i++)
    		    {
    			list.add(matrix[rowstart][i]);
    		    }
    		    //右边
    		    for(int j = rowstart + 1; j <= rowend; j++)
    			list.add(matrix[j][colend]);
    		    //下边
    		    for(int k = colend - 1; k >= colstart; k--)
    		    {
    			list.add(matrix[rowend][k]);
    		    }
    		    //左边
    		    for(int l = rowend - 1; l> rowstart; l--)
    			list.add(matrix[l][colstart]);
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值