螺旋矩阵
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
int left = 0, right = matrix[0].length - 1, up = 0, down = matrix.length - 1;
while(res.size() < matrix.length * matrix[0].length){
for(int j = left; j <= right; j++){
res.add(matrix[up][j]);
}
// 向下压缩一行
up++;
for(int i = up; i <= down; i++){
res.add(matrix[i][right]);
}
// 向左压缩一列
right--;
for(int j = right; j >= left && up <= down; j--){
res.add(matrix[down][j]);
}
// 向上压缩一行
down--;
for(int i = down; i >= up && left <= right; i--){
res.add(matrix[i][left]);
}
// 向右压缩一列
left++;
}
return res;
}
}
上一题的代码热热还能用…
class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int left = 0, right = matrix[0].length - 1, up = 0, down = matrix.length - 1, num = 1;
while(left <= right && up <= down){
// while(num <= n * n){} 也可以
for(int i = left; i <= right; i++){
matrix[up][i] = num;
num++;
}
up++;
for(int i = up; i <= down; i++){
matrix[i][right] = num;
num++;
}
right--;
for(int i = right; i >= left; i--){
matrix[down][i] = num;
num++;
}
down--;
for(int i = down; i >= up; i--){
matrix[i][left] = num;
num++;
}
left++;
}
return matrix;
}
}