Leetcode 59:螺旋矩阵 Ⅱ
思路
按数字增长方向排列模拟来就行,按从左到右,从上到下,再从右到左,从左到右。最主要的是定义好边界值! 将每次循环的行列值定下来。用行列起始位置来标定,更加清晰。
代码
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. 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是一个能够存放任意类型的动态数组,能够增加和压缩数据。
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支持下标访问元素)。
方法
size() 返回容器的大小
empty() 判断容器是否为空
max_size() 返回容器最大的可以存储的元素
capacity() 返回容器当前能够容纳的元素数量