且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

LeetCode 59 Spiral Matrix II(螺旋矩阵II)(Array)

更新时间:2021-12-09 04:50:54

版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/52145440

翻译

给定一个整数n,生成一个矩阵,要求以螺旋状将1n2的元素填进其中。

例如,给定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 ]
]

分析

这个上一题非常类似,54题是由外到内的取值,59题则是有由外到内的赋值,条件甚至都不用变。

LeetCode 54 Spiral Matrix(螺旋矩阵)(Array)(*)

代码

C Plus Plus

class Solution {
public:
  vector<vector<int> > generateMatrix(int n) {

  vector<vector<int> > matrix(n, vector<int>(n) );
  int u = 0, d = n - 1, l = 0, r = n - 1, k = 0;

  while (true) {
    // up
    for (int col = l; col <= r; col++) matrix[u][col] = ++k;
    if (++u > d) break;
    // right
    for (int row = u; row <= d; row++) matrix[row][r] = ++k;
    if (--r < l) break;
    // down
    for (int col = r; col >= l; col--) matrix[d][col] = ++k;
    if (--d < u) break;
    // left
    for (int row = d; row >= u; row--) matrix[row][l] = ++k;
    if (++l > r) break;
  }
  return matrix;
}
};

Java

updated at 2016/09/04
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        if (n < 1) return matrix;
        int u = 0, d = n - 1, l = 0, r = n - 1, k = 1;
        while (true) {
            // up
            for (int col = l; col <= r; col++) matrix[u][col] = k++;
            if (++u > d) break;
            // right
            for (int row = u; row <= d; row++) matrix[row][r] = k++;
            if (--r < l) break;
            // down
            for (int col = r; col >= l; col--) matrix[d][col] = k++;
            if (--d < u) break;
            // left
            for (int row = d; row >= u; row--) matrix[row][l] = k++;
            if (++l > r) break;
        }
        return matrix;
    }