spiral-matrix
来源:互联网 发布:c语言是伪代码吗 编辑:程序博客网 时间:2024/06/01 21:09
packagecom.ytx.array;
importjava.util.ArrayList;
importjava.util.List;
/** 题目: 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].
*@authoryuantian xin
* 给你一个m*n的矩阵,以螺旋顺序输出其中的元素。
*
* 使用四个数字分别记录上下左右四个边界的位置,不断循环收窄这些边界,最终当两个边界重叠时,结束循环。
*/
publicclass Spiral_matrix {
public ArrayList<Integer> spiralOrder(int[][]matrix) {
ArrayList<Integer>arrayList = newArrayList<Integer>();
if(matrix== null || matrix.length== 0) {
returnarrayList;
}
//左右上下四个边界
int left = 0;
int right = matrix[0].length- 1;
int top = 0;
int bottom = matrix.length- 1;
//循环收窄边界,螺旋遍历,边界都是向中间收窄
for( ; ;) {
//上边,从左到右
for(inti = left;i <= right;i++) {
arrayList.add(matrix[top][i]);
}
//横向遍历完上边一行之后,上边界增加向中间收窄,所以++top,再判断上下边界是否重叠
if(++top> bottom) break;
//右边,从上到下
for(inti = top;i <= bottom;i++) {
arrayList.add(matrix[i][right]);
}
//竖向遍历完右边一列之后,右边界减少向中间收窄,所以--right,再判断左右边界是否重叠
if(left> --right)break;
//下边,从右向左
for(inti = right;i >= left;i--) {
arrayList.add(matrix[bottom][i]);
}
//横向遍历下边一行,下边界减少向中间收窄,所以--bottom,再判断上下边界是否重叠
if(top> --bottom)break;
//左边,从下到上
for(inti = bottom;i >= top;i--) {
arrayList.add(matrix[i][left]);
}
//竖向遍历左边一列,左边界增加向中间收窄,所以++left,再判断左右边界是否重叠
if(++left> right) break;
}
returnarrayList;
}
publicstatic void main(String[]args) {
/*int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};*/
int[][] matrix = {{1},{2}};
ArrayList<Integer>list = newArrayList<Integer>();
list= new Spiral_matrix().spiralOrder(matrix);
for(Integeri : list) {
System.out.print(i+ " ");
}
}
}
阅读全文
1 0
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- Spiral Matrix
- 用户管理权限管理filter
- Redis复制与可扩展集群搭建
- 史上最全的JAVA面试总结
- 内核扫函数 特征码定位
- UCOSIII中常用功能API函数的配置
- spiral-matrix
- 【51Nod1582】 n叉树
- Hibernate(七)实现多对多关联映射关系
- Axis2 环境搭建
- vector相关
- 上海python培训机构都有哪些?
- 剪轴凝截Analdeta.Tessera.Pro.v3.2.2.Build.2015.10.05.Win64 1CD
- 文章标题
- 通过URL下载文件