题目
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
例如,
给出以下矩阵:
[↵ [ 1, 2, 3 ],↵ [ 4, 5, 6 ],↵ [ 7, 8, 9 ]↵]
你应该返回[1,2,3,6,9,8,7,4,5]。
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[↵ [ 1, 2, 3 ],↵ [ 4, 5, 6 ],↵ [ 7, 8, 9 ]↵]↵
You should return[1,2,3,6,9,8,7,4,5].
思路
1.螺旋矩阵-- 首先出口 判断 一行或者一列的 直接add到list中
2.然后从左到右,从上到下,从右到左,从下到上。 从大圈依次循环到小圈即可。
代码
import java.util.*;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
if(matrix==null||matrix.length==0){
return res;
}
int m = matrix.length;
int n = matrix[0].length;
int x = 0;
int y = 0;
while(m>0&&n>0){
if(m==1){
for(int i=0;i<n;i++){
res.add(matrix[x][y++]);
}
break;
}else if(n==1){
for(int i=0;i<m;i++){
res.add(matrix[x++][y]);
}
break;
}
//从左到右
for(int i =0;i<n-1;i++){
res.add(matrix[x][y++]);
}
//从上到下
for(int i = 0;i<m-1;i++){
res.add(matrix[x++][y]);
}
//从右到左
for(int i = 0;i<n-1;i++){
res.add(matrix[x][y--]);
}
//从下到上
for(int i=0;i<m-1;i++){
res.add(matrix[x--][y]);
}
//x y 回到外框的源点,然后往中间,x++ y++; 且m n的length-2
x++;
y++;
m=m-2;
n=n-2;
}
return res;
}
}
总结
用到list相关或者其他 记得导入相关的包。
不然会报错;
import java.util.*;
扩展题:
给定一个整数n,将数字1到n^2n
2
按螺旋的顺序填入n×n的矩阵
例如:
给出的n=3,
你应该返回如下矩阵:
[↵ [ 1, 2, 3 ],↵ [ 8, 9, 4 ],↵ [ 7, 6, 5 ]↵]
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =3,
You should return the following matrix:
[↵ [ 1, 2, 3 ],↵ [ 8, 9, 4 ],↵ [ 7, 6, 5 ]↵]↵
思路
1.同样用螺旋 多层遍历的方式
代码
public class Solution {
public int[][] generateMatrix(int n) {
int[][] A = new int[n][n];
if(n==0){
return A;
}
if(n==1){
A[0][0]=1;
}
int num = 1;
int x = 0;
int y = 0;
int t = n;
while(t>0){
if(t==1){
//多加一层判断奇数 最后一层 直接赋值即可
if(n%2!=0){
A[n/2][n/2]=num;
}
}
for(int i=0;i<t-1;i++){
A[x][y++]=num;
num++;
}
for(int i=0;i<t-1;i++){
A[x++][y]=num;
num++;
}
for(int i=0;i<t-1;i++){
A[x][y--]=num;
num++;
}
for(int i=0;i<t-1;i++){
A[x--][y]=num;
num++;
}
x++;
y++;
t=t-2;
}
return A;
}
}