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:
You should return
就是找规律,四个循环,注意边界!!
Given an integer n, generate a square matrix filled with elements from 1 to n2 in
spiral order.
For example,
Given n =
You should return the following matrix:
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;
}
}
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;
}
}
相关文章推荐
- Iterator接口用法
- html表单及其属性
- 如何提升思维广度、深度、高度和远度,从而完善自己的思维体系?
- 最短路算法详解(Dijkstra/SPFA/Floyd)
- (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】
- 第十四周进度条
- html框架及其属性
- opencv图像形态学处理
- 今天一共花了47元
- icecap录屏gif
- 软件工程(构建之法)学期总结
- StringBuffer append 死锁
- C# HttpListener 开发服务器示例
- hihoCoder挑战赛 one
- 数据库sqlite基本操作
- 【Leetcode】Climbing Stairs
- 第二次团队冲刺--10
- 【Leetcode】Range Sum Query - Immutable
- 【Leetcode】Implement Queue using Stacks
- 第二阶段10