数组
螺旋矩阵
59. 螺旋矩阵 II - 力扣(LeetCode) (leetcode-cn.com)
class Solution {
public int[][] generateMatrix(int n) {
int res[][] = new int[n][n];
int k = 0;
int left,right;
for(left = 0,right = n - 1; left < right; ++left,--right) {
for (int i = left; i < right; ++i) {
res[left][i] = ++k;
}
for (int i = left; i < right; ++i) {
res[i][right] = ++k;
}
for (int i = right; i>left ;--i) {
res[right][i] = ++k;
}
for (int i = right; i>left ;--i) {
res[i][left] = ++k;
}
}
if (left == right) {
res[left][right] = ++k;
}
return res;
}
}
54. 螺旋矩阵 - 力扣(LeetCode) (leetcode-cn.com)
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> res = new ArrayList<Integer>();
int left = 0, right = matrix[0].length - 1; // 输出的是列数
int up = 0, down = matrix.length - 1; //输出的是行数
while (left < right && up < down) {
for (int j = left; j < right; ++j) { //打印某一圈的上
res.add(matrix[up][j]);
}
for (int j = up; j < down; ++j) { //打印某一圈的右
res.add(matrix[j][right]);
}
for (int j = right; j > left ;--j) {
res.add(matrix[down][j]);
}
for (int j = down; j > up ;--j) {
res.add(matrix[j][left]);
}
++left;
--right;
++up;
--down;
}
if (up == down) {
for (int j = left; j<= right; ++j) {
res.add(matrix[left][j]);
}
return res;
}
else if (left == right) {
for (int j = up; j <= down; ++j) {
res.add(matrix[j][left]);
}
}
return res;
}
}
总体难度不大,但是应当注意判断循环之后是否有空余的行或列。