- 题目详述
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
二.自我探寻
代码(思路在注释中):class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int m=matrix.length;
if(m==0)
{
return new ArrayList<Integer>();
}
int n=matrix[0].length;
if(m==1&&n==1)
{
List<Integer> numt=new ArrayList<Integer>();
numt.add(matrix[0][0]);
return numt;
}
int i=0;/*i表示x轴*/
int j=0;/*j表示y轴*/
int[][] nums=new int[m][n];
List<Integer> num=new ArrayList<Integer>();
int q=1;/*0往上,1往右,2往下,3往左*/
num.add(matrix[0][0]);
nums[0][0]=1;
while(true)
{
if(
(j+1>=m||nums[j+1][i]==1)
&&(j-1<0||nums[j-1][i]==1)
&&(i+1>=n||nums[j][i+1]==1)
&&(i-1<0||nums[j][i-1]==1))/**注意先判断边界**/
{
break;
}
switch(q)
{
case 0:
j--;
break;
case 1:
i++;
break;
case 2:
j++;
break;
case 3:
i--;
break;
}
if(i>=n||(q==1&&nums[j][i]==1))
{
q=2;
i--;
continue;
}
else if(i<0||(q==3&&nums[j][i]==1))
{
q=0;
i++;
continue;
}
else if(j>=m||(q==2&&nums[j][i]==1))
{
q=3;
j--;
continue;
}
else if(j<0||(q==0&&nums[j][i]==1))
{
q=1;
j++;
continue;
}
num.add(matrix[j][i]);
nums[j][i]=1;
}
return num;
}
}
评价:
- 网络学习过程
暂无
- Python实现
暂无