顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路
1.选坐标为(0,0),(1,1)…的点记为(start,start),作为开始坐标,下一圈开始坐标为(start+1,start+1); 2.判断是否进入下一圈(即是否打印完成)的条件是rows>start2 && cols>start2; 3.打印一圈的左上角坐标为(start,start),右下角的坐标为(cols-start-1,rows-start-1) 4.根据一圈左上角和右下角坐标判断“从左到右”,“从上到下”,“从右到左”,“从下到上”需要打印的点。
代码
function printMatrix(matrix
)
{
if(matrix
== null || matrix
[0].length
== 0){
return;
}
var hang
= matrix
.length
;
var lie
= matrix
[0].length
;
var start
= 0;
var res
= [];
while(lie
> start
* 2 && hang
> start
* 2){
var endx
= lie
-1-start
;
var endy
= hang
-1-start
;
for(var i
= start
;i
<=endx
;i
++){
res
.push(matrix
[start
][i
]);
}
if(start
< endy
){
for(var i
= start
+1;i
<=endy
;i
++){
res
.push(matrix
[i
][endx
])
}
}
if(start
< endx
&& start
< endy
){
for (var i
= endx
- 1; i
>= start
; i
--) {
res
.push(matrix
[endy
][i
]);
}
}
if (start
< endx
&& start
< endy
- 1) {
for (var i
= endy
- 1; i
>= start
+ 1; i
--) {
res
.push(matrix
[i
][start
]);
}
}
start
++;
}
return res
;
}