【Leetcode题解】Leetcode 59:螺旋矩阵 Ⅱ (小白入门Leetcode第一道题)

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=1for(;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()	返回容器当前能够容纳的元素数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值