class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new LinkedList<>();
int round=0; // 已经循环的轮数
int i=0,j=0;
int m=matrix.length, n=matrix[0].length;
while(round==0||round<Math.min(m,n)/2){
//
while(j<n-round){
list.add(matrix[i][j]);
j++;
}
//
j--;
i++;
while(i<m-round){
list.add(matrix[i][j]);
i++;
}
//
i--;
j--;
while(j>=round){
list.add(matrix[i][j]);
j--;
}
//
j++;
i--;
while(i>=round+1){
list.add(matrix[i][j]);
i--;
}
i++;
j++;
round++;
}
while(j<n-round){
list.add(matrix[i][j]);
j++;
}
return list;
}
}
**如何判断路径是否结束?**由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new LinkedList<>();
int round=0; // 已经循环的轮数
int len=0; // 路径长度
int i=0,j=0;
int m=matrix.length, n=matrix[0].length;
//
while(j<n-round){
list.add(matrix[i][j]);
j++;
}
while(true){
//
j--;
i++;
while(i<m-round){
list.add(matrix[i][j]);
i++;
if(list.size()>=n*m){
break;
}
}
if(list.size()>=n*m){
break;
}
//
i--;
j--;
while(j>=round){
list.add(matrix[i][j]);
j--;
if(list.size()>=n*m){
break;
}
}
if(list.size()>=n*m){
break;
}
//
j++;
i--;
while(i>=round+1){
list.add(matrix[i][j]);
i--;
if(list.size()>=n*m){
break;
}
}
if(list.size()>=n*m){
break;
}
//
i++;
j++;
while(j<n-round-1){
list.add(matrix[i][j]);
j++;
if(list.size()>=n*m){
break;
}
}
if(list.size()>=n*m){
break;
}
round++;
}
return list;
}
}
break