leetcode:Spiral Matrix II

来源:互联网 发布:java web 项目路径 编辑:程序博客网 时间:2024/05/29 18:00


Given an integer n, generate a square matrix filled with elements from 1 ton2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]

题目要求n × n矩阵用1 到n^n的数字环形围绕起来

显然,数字是递增的,我首先分别打印出了在n = 5的情况下的 行列坐标的值,就直接发现了规律了

n = 5的情况,第一次行列的最大和最小分别是1 5

行:1,1,1,1,  1,2,3,4,5,    5,5,5,5,    4,3,2

列:1,2,3,4,   5,5,5,5,5,   4,3,2,1,    1,1,1

第二次的行列的最大和最小分别是 2, 4

行: 2,2,     2,3,4,    4,4,    3

列: 2,3,     4,4,4,    3,2,    2

看了这两个例子后我直接推出规律:
对于 假设行列的最大最小分别是max, min

对应的row col坐标

row 的坐标=  (max - min + 1) 个min, min + 1 ......max - 1, (max - min + 1)个max, max - 1, max - 2 ......min + 1

col  的坐标=  min, min + 1 ......max, (max - min - 1)个max,min, min + 1,......max, (max - min - 1)个min

具体看代码,很直白的,代码如下:

public class Solution {    public int[][] generateMatrix(int n) {        int arr[][] = null;        if(n >= 0){            arr = new int[n][n];            int num = 1;            int len = n * n;            int row = 0, col = n - 1;            while(row < col){                for(int i = row; i <= col; ++i){                    arr[row][i] = num++;                }                for(int i = row + 1; i < col; ++i){                    arr[i][col] = num++;                }                for(int i = col; i >= row; --i){                    arr[col][i] = num++;                }                for(int i = col - 1; i > row; --i){                    arr[i][row] = num++;                }                row++;                 col--;            }            if(row == col)arr[row][col] = num;        }        return arr;    }}
















0 0
原创粉丝点击