Spiral Matrix II

来源:互联网 发布:php源码分析弱类型 编辑:程序博客网 时间:2024/06/03 19:51

题目名称
Spiral Matrix II—LeetCode链接

描述
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 ]]

分析
  先初始化一个n*n的二维向量,按从最外圈到最内圈的数序来将数字填进去,如图所示:

这里写图片描述

  两层循环,外层循环表示对哪一圈进行处理,内层循环对所在圈的位置进行赋值。

int a=0,b=n-1,val=0;while(a<b){    for(int i=0;i<(b-a);i++){        res[a][a+i]=++val;        res[a+i][b]=val+(b-a);        res[b][b-i]=val+2*(b-a);        res[b-i][a]=val+3*(b-a);    }    val = res[a+1][a];    a++;    b--;}

这里写图片描述

  考虑到n为奇数时,最内圈只有一个格子,上述循环会丢失最内圈一个元素的赋值,所以当n为奇数时,要增加一个判断:

if(n%2!=0){    res[n/2][n/2]=n*n;}

C++代码

vector< vector<int> > generateMatrix(int n) {    vector< vector<int> > res;    if(n<=0)        return res;    vector<int> row(n,0);    res.insert(res.end(),n,row);    if(n==1){        res[0][0]=1;        return res;    }    int a=0,b=n-1,val=0;    while(a<b){        for(int i=0;i<(b-a);i++){            res[a][a+i]=++val;            res[a+i][b]=val+(b-a);            res[b][b-i]=val+2*(b-a);            res[b-i][a]=val+3*(b-a);        }        val = res[a+1][a];        a++;        b--;    }    if(n%2!=0){        res[n/2][n/2]=n*n;    }    return res;  }

总结
  根据上一道题目对二维数组按照由外到内的每一圈进行处理,这也是对二维数组处理的一个经验。

0 0
原创粉丝点击