您的位置:首页 > 其它

54 59. Spiral Matrix I II

2016-06-04 20:18 393 查看
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]
.



就是找规律,四个循环,注意边界!!

public static List<Integer> spiralOrder(int[][] matrix)
{
List<Integer> retlist=new ArrayList<>();
int m=matrix.length-1;
if(m<0)
return retlist;

int n=matrix[0].length-1;
int rowtimes=(m+2)/2;
int coltimes=(n+2)/2;

for(int cnt=0;cnt<Math.max(rowtimes, coltimes);cnt++)
{

if(cnt<rowtimes)
{
for(int j=cnt;j<=n-cnt;j++)
if(cnt<=m)
retlist.add(matrix[cnt][j]);
}

if(cnt<coltimes)
{
for(int i=cnt+1;i<=m-cnt-1;i++)
if(n-cnt>=0)
retlist.add(matrix[i][n-cnt]);
}

if(cnt<rowtimes)
{
for(int j=n-cnt;j>=cnt;j--)
{
if(m-cnt<=m/2)
break;
retlist.add(matrix[m-cnt][j]);
}
}

if(cnt<coltimes)
{
for(int i=m-cnt-1;i>=cnt+1;i--)
{
if(cnt+1>(n+1)/2)
break;
retlist.add(matrix[i][cnt]);
}
}
}
return retlist;
}



Spiral Matrix II

 

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


public class Solution {
public static int[][] generateMatrix(int n)
{

int times = (n + 1) / 2;
int[][] matrix = new int

;
n--;
int count = 1;

for (int cnt = 0; cnt < times; cnt++)
{
for (int j = cnt; j <= n - cnt; j++)
if (cnt <= n)
matrix[cnt][j] = count++;

for (int i = cnt + 1; i <= n - cnt - 1; i++)
if (n - cnt >= 0)
matrix[i][n - cnt] = count++;

for (int j = n - cnt; j >= cnt; j--)
{
if (n - cnt <= n / 2)
break;
matrix[n - cnt][j] = count++;
}

for (int i = n - cnt - 1; i >= cnt + 1; i--)
{
if (cnt + 1 > (n + 1) / 2)
break;
matrix[i][cnt] = count++;
}

}
return matrix;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: