LeetCode59 Spiral Matrix II 解题报告

By | 11/03/2018

【题目】:

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

【Code】:

#include<vector>

#include<iostream>

using namespace std;

//思路和54有点相似相当于一个你过程,首先是先判断是不是值得去操作即对0为空的情况的判断再一个就是首先生成一个n*n的二维矩阵如此一来方便后面的填充

//还有就是break不能忘了 不然后面不好跳出循环

class Solution {

public:

vector<vector<int> > generateMatrix(int n) {

if(n ==0){

return vector<vector<int>>();

}

vector<vector<int> > result(n, vector<int>(n, 0));//生成一个n*n得二维矩阵用于储存返回值

int l=0, r=n-1, u=0, d=n-1;//l表示left,r表示right,u表示up,d表示down

int k=1;//k表示其实数据的初始值

while(true){

//up

for(int i=l; i<=r; i++){

result[u][i]=k++;

}

if(++u>d){

break;

}

//right

for(int i=u; i<=d; i++){

result[i][r]=k++;

}

if(r--<l){

break;

}

//down

for(int i=r; i>=l; i--){

result[d][i]=k++;

}

if(--d<u){

break;

}

//left

for(int i=d; i>=u; i--){

result[i][l]=k++;

}

if(++l>r){

break;

}

}

return result;

}

};

【遇到的问题及解决办法】

说句实话认真做了Spiral Matrix的人做这个变式基本是分分钟的事情的了,几乎就是之前的逆过程,现在从1开始赋值,然后还是按照之前的上下左右的套路把值传送到我们一开始需要创建的一个二维容器当中,最后返回二维矩阵的首地址即可。但是这个地方还是要注意一下细节不是从0开始是从1开始因为题目给出的例子当中非常明显的给出的是1,嗯可能就是这些了。然后关于++和–前置还是后置的问题我相信LeetCode54当中讲的非常清楚了,如果这个地方你不懂欢迎翻看LeetCode54 Spiral Matrix的解题报告。

如果这篇文章对你有帮助,欢迎打赏:

WechatIMG47

发表评论