顺时针打印矩阵
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。
给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。
测试样例:
[[1,2],[3,4]],2,2
返回:[1,2,3,4]
import
java.util.*;
public
class
Printer {
public
int
[] clockwisePrint(
int
[][] mat,
int
m,
int
n) {
int
[] result=
new
int
[m*n];
if
(mat==
null
)
return
result;
int
cur=
0
,i,j,k=
0
;
while
(
2
*cur<Math.min(m,n)){
for
(i=cur,j=cur-
1
;j<n-cur-
1
;j++) result[k++]=mat[i][j+
1
];
for
(;i<m-cur-
1
;i++) result[k++]=mat[i+
1
][j];
for
(;
2
*cur!=m-
1
&&j>=cur+
1
;j--) result[k++]=mat[i][j-
1
];
for
(;
2
*cur!=n-
1
&&i>cur+
1
;i--) result[k++]=mat[i-
1
][j];
cur++;
}
return
result;
}
}
顺时针旋转矩阵
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
import
java.util.*;
public
class
Rotate {
public
int
[][] rotateMatrix(
int
[][] mat,
int
n) {
for
(
int
i=
0
;i<n/
2
;i++){
int
p=i,q=n-
1
-i,index=
0
;
while
(index!=q-p){
int
temp=mat[p][p+index];
mat[p][p+index]=mat[q-index][p];
mat[q-index][p]=mat[q][q-index];
mat[q][q-index]=mat[p+index][q];
mat[p+index][q]=temp;
index++;
}
}
return
mat;
}
}
之字形打印矩阵
对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。
给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。
测试样例:
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,3
返回:[1,2,3,6,5,4,7,8,9,12,11,10]
import
java.util.*;
public
class
Printer {
public
int
[] printMatrix(
int
[][] mat,
int
n,
int
m) {
int
[] result=
new
int
[n*m];
int
k=
0
;
for
(
int
i=
0
;i<n;i++){
for
(
int
j=
0
;j<m;j++){
if
(i%
2
==
0
) result[k++]=mat[i][j];
else
result[k++]=mat[i][m-
1
-j];
}
}
return
result;
}
}