avatar

目录
Leetcode 59 螺旋矩阵Ⅱ

Leetcode 59:螺旋矩阵 Ⅱ

3fVVSJ.png

思路

按数字增长方向排列模拟来就行,按从左到右,从上到下,再从右到左,从左到右。最主要的是定义好边界值! 将每次循环的行列值定下来。用行列起始位置来标定,更加清晰。

代码

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> > matrix(n,vector<int>(n));

int row_start=0,row_end=n-1;
int col_strat=0,col_end=n-1;
int num=1;

for(;num<=n*n;)
{
for(int i=col_start;i<=col_end;i++)
{
matrix[row_start][i] = num;
num++;
}
row_start++;
for(int i=row_start;i<=row_end;i++)
{
matrix[i][col_end] = num;
num++;
}
col_end--;
for(int i=col_end;i>=col_start;i--)
{
matrix[row_end] [i] = num;
num++;
}
row_end--;
for(int i=row_end;i>=row_start;i--)
{
matrix[i][col_start] = num;
num++;
}
col_start++;
}
return matrix;
}
};

做题遇到的”新”东西

1 new/delete new[]/delete[]

很久没碰代码,这个C++基础的东西都忘记了,哭唧唧。

原本想申请动态内存都使用new的,后面发现题目已经给了 vector

这里复习一下new/delete

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 1. new 和 delete 不是函数,它们都是 C++ 定义的关键字,通过特定的语法可以组成表达式。

2. C++ 语言标准库的库函数原型:
void *operator new(size_t); //allocate an object
void *operator delete(void *); //free an object

void *operator new[](size_t); //allocate an array
void *operator delete[](void *); //free an array

3.用法
>申请/释放指针
int *pi = new int(10); //分配一个int型变量所占大小的空间,在其中放入十进制数10,并将首地址赋给int *型指针pi。
delete pi;

>申请/释放一维数组
string *ps = new string[10]; //array of 10 empty string
delete [] ps;

>申请/释放二维数组
int **arr = NULL;
arr = new int*[m];
for(int i=0;i<m;i++)
{
arr[i] = new int[n];
}

for(int i=0;i<m;i++)
{
delete[] arr[i];
}

2 vector

vector是C++标准模板库中的内容,vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>   //头文件

vector<int>test;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector这样test[0]就是1,test[1]就是2

int i =test.at(1);//i为2

vector<vector<int>> matrix(m,vector<int>(n)); //此定义方法错误
vector<vector<int> > matrix(m,vector<int>(n));

含义:定义了一个vector容器,元素类型为vector<int>,初始化为包含m个vector<int>对象,每个对象都是一个新创立的vector<int>对象的拷贝,而这个新创立的vector<int>对象被初始化为包含n个0。

每部分解析:
  构造函数vector(size_type n, const allocator_type& alloc = allocator_type())
  表示构造一个使用alloc分配内存(如果是初学,不用管这个,使用默认的就好)的含n个元素的vector,
  其中每个元素执行值初始化(对于内置类型即初始化为0)。因此vector<int>(n)表示构造一个无名且含n个0的vector<int>对象。
  
  构造函数vector(size_type n, const value_type& val, const allocator_type& alloc = allocator_type())
  表示构造一个使用alloc分配内存的含n个元素的vector,其中每个元素是val的一个拷贝。访问某元素时,方法和二维数组相同。
  
  从结果上看,类似于创建了一个m×n的二维数组,而且可以通过v[i][j]的方式来访问元素(vector支持下标访问元素)。
文章作者: Bellium
文章链接: https://belliumtang.github.io/2020/03/02/Leetcode-59-%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5%E2%85%A1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bellium
打赏
  • 微信Wechatpay
    微信Wechatpay
  • 支付宝Alipay
    支付宝Alipay