剑指offer-19-循环打印数组
顺时针打印矩阵
http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a
思路
没有什么好的思路
- 按圈顺时针循环,在纸上画出来各个边界
- 旋转数组,取第一行,然后递归。然而旋转数组的复杂度比较高。
代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> arr=new ArrayList<>();
int p=0,q=matrix[0].length-1,h=0,l=matrix.length-1;
while(p<=q && h<=l){
if(p==q){
for(int i=h;i<=l;i++){
arr.add(matrix[i][p]);
}
break;
}
if(h==l){
for(int i=p;i<=q;i++){
arr.add(matrix[h][i]);
}
break;
}
for(int i=p;i<=q;i++){
arr.add(matrix[h][i]);
}
h++;
for(int i=h;i<=l;i++){
arr.add(matrix[i][q]);
}
q--;
for(int i=q;i>=p;i--){
arr.add(matrix[l][i]);
}
l--;
for(int i=l;i>=h;i--){
arr.add(matrix[i][p]);
}
p++;
}
return arr;
}
} 剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构
查看13道真题和解析