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