54. Spiral Matrix
来源:互联网 发布:spark save json 编辑:程序博客网 时间:2024/05/18 08:49
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]
.
思路:设置一个(lowi,lowj)和一个(highi,highj)分别指向不同的(0,0)和(m-1,n-1),当lowi<highi&lowj<highj的时候按照蜘蛛的规律,四个循环,给4个边赋值就行。当m*n的时候,可能最后(lowi,lowj)和(highi,highj)在同一行或者同一列上,再用一个循环将这一行或者这一列赋值就行了。
代码如下(已通过leetcode)
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list=new ArrayList<Integer>();
if(matrix==null ||matrix.length==0) return list;
int m=matrix.length;
int n=matrix[0].length;
getlist(list,matrix,0,0,m-1,n-1);
return list;
}
private void getlist(List<Integer> list, int[][] matrix, int lowi, int lowj, int highi, int highj) {
// TODO Auto-generated method stub
while(lowi<highi&&lowj<highj) {
for(int i=lowj;i<=highj;i++) list.add(matrix[lowi][i]);
for(int i=lowi+1;i<=highi;i++) list.add(matrix[i][highj]);
for(int i=highj-1;i>=lowj;i--) list.add(matrix[highi][i]);
for(int i=highi-1;i>=lowi+1;i--) list.add(matrix[i][lowj]);
lowi++;
lowj++;
highi--;
highj--;
}
if(lowi==highi) {
if(lowj==highj) list.add(matrix[lowi][lowj]);
else {
for(int i=lowj;i<=highj;i++) list.add(matrix[lowi][i]);
}
} else {
if(lowj==highj) {
for(int i=lowi;i<=highi;i++) list.add(matrix[i][lowj]);
}
}
}
}
- 54. Spiral Matrix && 59. Spiral Matrix II
- 59. Spiral Matrix II && 54. Spiral Matrix
- LeetCode 54. Spiral Matrix
- [LeetCode]54.Spiral Matrix
- LeetCode --- 54. Spiral Matrix
- [Leetcode] 54. Spiral Matrix
- [leetcode] 54.Spiral Matrix
- 54. Spiral Matrix
- Leetcode-54.Spiral Matrix
- **LeetCode 54. Spiral Matrix
- Leetcode 54. Spiral Matrix
- [leetcode] 54. Spiral Matrix
- 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- 54. Spiral Matrix LeetCode
- 54. Spiral Matrix
- 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- android TextView属性的详细介绍 分享
- NYOJ-499-迷宫
- 《VR入门系列教程》之19---GearVR开发初识
- java 内部类详解
- sendBroadcast与sendStickyBroadcast的区别
- 54. Spiral Matrix
- ul建立1000个li
- Java 框架思路.doc
- Spring实践:面向切面编程(AOP)
- 了解四大主流浏览器内核
- 《VR入门系列教程》之20---使用Oculus移动端SDK
- HashMap 与 hashtable的区别
- Hibernate EhCache 二级缓存配置.pdf
- 二分查找的java实现