Leetcode 59:螺旋矩阵 Ⅱ
思路
按数字增长方向排列模拟来就行,按从左到右,从上到下,再从右到左,从左到右。最主要的是定义好边界值! 将每次循环的行列值定下来。用行列起始位置来标定,更加清晰。
代码
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
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是一个能够存放任意类型的动态数组,能够增加和压缩数据。
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支持下标访问元素)。
|