当前位置:首页 > 公司荣誉 >

LeetCode -- SpiralOrder

编辑:北京聚贤贵都宾馆有限公司时间:2017-09-11 13:47:47阅读次数:2
LeetCode -- SpiralOrder


题目描述:





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





从例子可以看出,需要做的是从矩阵的第一个元素为起始,沿外环向内依次遍历,最后打印出结果。





思路:

获取矩阵的长宽,设需要走n圈,则n = Min(宽度,高度)/2。

从左上节点为起始开始遍历,走到最右的最后一个元素开始向下走,走到最后向左走,最后向上走。走了一圈,需要把坐标往内+1。

需要考虑刚好处于矩阵中间线的情况。





实现代码:














public class Solution {
public IList SpiralOrder(int[,] matrix) {
if(matrix == null){
return new List();
}
var result = new List();
var rowLen = matrix.GetLength(0);
var len = matrix.GetLength(1);
if(rowLen == 1){
for(var i =0 ;i < len; i++){
result.Add(matrix[0,i]);
}
return result;
}
if(len == 1){
for(var i =0 ;i < rowLen; i++){
result.Add(matrix[i,0]);
}
return result;
}
var minLen = Math.Min(rowLen,len);
var cycleCount = minLen % 2 == 0 ? minLen/2 : (minLen + 1) / 2;
var c = 0;
for(var i = 0;i < cycleCount; i++){
if(c == len-c-1){
for(var k = c;k < rowLen - c; k++){
result.Add(matrix[k, c]);
}
c++;
continue;
}
// stick row to top, column : [c,len-c-1]
for(var top = c; top < len-c - 1; top++){
result.Add(matrix[c,top]);
}
// stick column to right, row : [c,rowLen-c-1]
for(var right = c; right < rowLen-c - 1; right ++){
result.Add(matrix[right, len-c-1]);
}
// stick row to bottom, column : [len-c-1, c]
for(var down = len-c -1; down > c; down --){
result.Add(matrix[rowLen-c-1, down]);
}
// stick column to left, row : [len-c-1, c]
for(var left = rowLen-c - 1; left > c; left --){
result.Add(matrix[left, c]);
}
c++;
}
return result;
}
}



企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网页设计 https://www.feimao666.com

上一篇:PHP面向对象基础知识总结 下一篇:最后一页

相关阅读