码迷,mamicode.com
首页 > Web开发 > 详细

螺旋矩阵的获取,原型在https://leetcode.com/articles/spiral-matrix/

时间:2018-11-28 20:32:58      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:大致   对象   UNC   定义   col   cti   example   并且   class   

今天看了个题目很有意思,原型在https://leetcode.com/articles/spiral-matrix/

摘要如下:

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

Example 1:

Input:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]

Example 2:

Input:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
具体意思大致就是,给你一个m*n的二维数组,然后顺时针旋转获取里面的值,看了它后面的很多传统代码,反正就是用了很多控制,判断语句才把结果求出来,并且效率很低,不便于理解;

而随着脚本语言越来越越流行了,我试着用js的形参可以传方法,数组可以保存方法的特性把它写下来,节省了大量的思考和开销,执行效率很高,并且易于理解,供以后参考(自己测试了都是10ms以内给结果的,哈哈);
--------------------------------------------------------------------
思路:
1.因为是顺时针取数,所以定义四个方法right,down,left,up把它存入数组中,头shift()执行完push()到尾部,构成一个循环;
2.因为有边界,定义一个对象有right,left,top,bottom四个属性,供方法执行共享
3.遍历直到边界收缩为0;
技术分享图片
 1 /**
 2  * 矩阵螺旋取数
 3  */
 4 const spiralOrder=function(matrix){
 5     let orderPos={
 6             left:0,
 7             right:matrix[0].length-1,
 8             top:0,
 9             bottom:matrix.length-1
10     }
11     let functionSequence=[toRigth,toDown,toLeft,toUp]
12     let result=[];
13     while(orderPos.left<=orderPos.right&&orderPos.top<=orderPos.bottom){
14         doswitch(functionSequence.shift());
15     }
16     return result;
17     function doswitch(currentf){
18         currentf(result,matrix,orderPos)
19         functionSequence.push(currentf)
20     }
21     function toRigth(result,matrix,orderPos){
22         for(let i=orderPos.left;i<=orderPos.right;i++){
23             result.push(matrix[orderPos.top][i])
24         }
25         orderPos.top+=1;
26     }
27     function toDown(result,matrix,orderPos){
28         for(let i=orderPos.top;i<=orderPos.bottom;i++){
29             result.push(matrix[i][orderPos.right])
30         }
31         orderPos.right-=1;
32     }
33     function toLeft(result,matrix,orderPos){
34         for(let i=orderPos.right;i>=orderPos.left;i--){
35             result.push(matrix[orderPos.bottom][i])
36         }
37         orderPos.bottom-=1;
38     }
39     function toUp(result,matrix,orderPos){
40         for(let i=orderPos.bottom;i>=orderPos.top;i--){
41             result.push(matrix[i][orderPos.left])
42         }
43         orderPos.left+=1;
44     }
45 }
46 spiralOrder([[1,2,3],[4,5,6],[7,8,9]]);
View Code

 






螺旋矩阵的获取,原型在https://leetcode.com/articles/spiral-matrix/

标签:大致   对象   UNC   定义   col   cti   example   并且   class   

原文地址:https://www.cnblogs.com/376346295-blog/p/10034091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!