码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵螺旋遍历Spiral Matrix,Spiral Matrix2

时间:2016-08-12 14:43:39      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

SpiralMatrix:

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

 

算法分析:其实就是两重循环遍历,每次都是遍历一圈,然后遍历里面一圈...,需要记录m,n,每次遍历后,m,n都减去2;还要记录坐标x,y;

特例是n=1;m=1;其实m,n为奇数才有这种特例。

public class SpiralMatrix 
{
	public List<Integer> spiralOrder(int[][] matrix)
	{
		List<Integer> res = new ArrayList<>();
		if(matrix.length == 0 || matrix == null)
		{
			return res;
		}
		int m = matrix.length;
		int n = matrix[0].length;//得先判断矩阵是否为空,否则数组下标越界
		int x = 0, y = 0;
		while(m > 0 && n > 0)
		{
			if(m == 1)
			{
				for(int i = 0; i < n; i ++)
				{
					res.add(matrix[x][y++]);
				}
				break;//别忘了break
			}
			else if(n == 1)
			{
				for(int j = 0; j < m; j ++)
				{
					res.add(matrix[x++][y]);
				}
				break;
			}
			
			for(int i = 0; i < n-1; i ++)
			{
				res.add(matrix[x][y++]);
			}
			for(int i = 0; i < m-1; i ++)
			{
				res.add(matrix[x++][y]);
			}
			for(int i = 0; i < n-1; i ++)
			{
				res.add(matrix[x][y--]);
			}
			for(int i = 0; i < m-1; i ++)
			{
				res.add(matrix[x--][y]);
			}
			x++;
			y++;
			m -= 2;
			n -= 2;
		}
		return res;
	}
}

 

SpiralMatrix2:

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

 算法分析:和上一算法,类似,只不过这是个n*n矩阵,其实可以延伸到m*n矩阵。n*n使清空更简单,特别是n=1的时候。

public class SpiralMatrix2 
{
	public int[][] generateMatrix(int n) 
	{
		int[][] res = new int[n][n];
		if(n == 0)
		{
			return res;
		}
		int x = 0, y = 0;
		int val = 1;
		while(n > 0)
		{
			if(n == 1)
			{
				res[x][y] = val;
				break;
			}
			for(int i = 0; i < n-1; i ++)
			{
				res[x][y++] = val;
				val ++;
			}
			for(int i = 0; i < n-1; i ++)
			{
				res[x++][y] = val;
				val ++;
			}
			for(int i = 0; i < n-1; i ++)
			{
				res[x][y--] = val;
				val ++;
			}
			for(int i = 0; i < n-1; i ++)
			{
				res[x--][y] = val;
				val ++;
			}
			x ++;
			y ++;
			n -= 2;
		}
		return res;
	}
}

 

矩阵螺旋遍历Spiral Matrix,Spiral Matrix2

标签:

原文地址:http://www.cnblogs.com/masterlibin/p/5764656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!