文章目录
- 题目
- 方法一:按层模拟
题目

方法一:按层模拟
思路就是定义四个指针边界,按顺序扫完一遍,再缩小区域再扫描

public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> order = new ArrayList<Integer>();
int matrixlength = matrix.length;
int matrixNumlength = matrix[0].length;
//判空条件
if(matrix==null || matrixlength == 0 || matrixNumlength == 0) return order;
//定义四个指针边界
int top = 0;//行边界
int bot = matrixlength-1;
int left = 0;//列边界
int right = matrixNumlength-1;
while(left <= right && top <= bot){
// 首先循环最外层 顺序依次为右下左上
// (left) (right)
// (top)1, 2, 3, 4 (top)
// 5, 6, 7, 8
// (bot)9, 10, 11, 12(bot)
// (left) (right)
//右 --> 左 最上层
for(int i = left ;i <= right;i++){
order.add(matrix[top][i]);
}
//上 --> 下 最右层
for(int i = top+1 ;i <= bot;i++){
order.add(matrix[i][right]);
}
if(left!=right && bot!=top){// 如果right和left重合了 说明上往下扫描了一遍,就不需要再从下往上重复扫一遍了
// 如果 bot 和 top 重合了 说明左往右扫描了一遍,就不需要再从右往左重复扫一遍了
//左 --> 右 最下层
for(int i = right-1 ;i >= left;i--){
order.add(matrix[bot][i]);
}
//下 --> 上 最左层
for(int i = bot-1 ;i >top;i--){
order.add(matrix[i][left]);
}
}
//往里缩一圈
left ++;
right --;
top ++;
bot --;
}
return order;
}







![机器学习简介[01/2]:简单线性回归](https://img-blog.csdnimg.cn/img_convert/652dfc2ea7dd70d3847a0c7499d5947e.png)



![[ VMware 虚拟机 ] 启动不了图形界面,报 “The system is running in low-graphics mode” 错误](https://img-blog.csdnimg.cn/44fe68b710d44480b45e8f1054dd7703.png)







