59. Spiral Matrix II

来源:互联网 发布:猜数字java 编辑:程序博客网 时间:2024/05/01 23:52

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 ]
]
Subscribe to see which companies asked this question

蛇形填数这个题目不管在《算法竞赛入门经典》,还是《剑指OFFER》 都看过。
不过这还是第一次动手去写吧。思路比较清楚,就是要注意循环的时候,容易越界访问。

class Solution {public:    vector<vector<int>> generateMatrix(int n) {        vector<vector<int> > ans (n,vector<int>(n,0));        if(n<1)return ans;        int tot=1;        int i=0,j=0,k=1;        ans[i][j]=k++;        while(tot++<n*n){            //这里的j+1是关键,用j<n的话,下一个循环的时候就会约界访问数组            while(j+1<n&&ans[i][j+1]==0)ans[i][++j]=k++;            while(i+1<n&&ans[i+1][j]==0)ans[++i][j]=k++;            while(j-1>=0&&ans[i][j-1]==0)ans[i][--j]=k++;            while(i-1>=0&&ans[i-1][j]==0)ans[--i][j]=k++;        }        return ans;    }};
0 0
原创粉丝点击