数组-螺旋矩阵

64 阅读1分钟

相当难 边界容易搞错 上下左右 指针移动 中止条件值得反复思考

题目 LC59 leetcode.cn/problems/sp…

public int[][] generateMatrix(int n) {
    // 初始化结果矩阵
    int[][] res = new int[n][n];
    // 定义左右边界
    int left = 0;
    int right = n - 1;
    // 定义上下边界
    int top = 0;
    int bottom = n - 1;
    // 初始化当前要填入矩阵的数字
    int num = 1;
    
// 当左边界小于等于右边界且上边界小于等于下边界时,继续填充矩阵
while (left <= right && top <= bottom) {
    // 从左到右填充当前上边界这一行
    for (int i = left; i <= right; i++) {
        res[top][i] = num++;
    }
    // 上边界下移
    top++;
​
•    // 从上到下填充当前右边界这一列
•    for (int i = top; i <= bottom; i++) {
•        res[i][right] = num++;
•    }
•    // 右边界左移
•    right--;
​
•    // 检查是否仍有下边界行需要填充
•    if (top <= bottom) {
•        // 从右到左填充当前下边界这一行
•        for (int i = right; i >= left; i--) {
•            res[bottom][i] = num++;
•        }
•        // 下边界上移
•        bottom--;
•    }
​
•    // 检查是否仍有左边界列需要填充
•    if (left <= right) {
•        // 从下到上填充当前左边界这一列
•        for (int i = bottom; i >= top; i--) {
•            res[i][left] = num++;
•        }
•        // 左边界右移
•        left++;
•    }
}
​
// 返回生成的螺旋矩阵
return res;
​
}