【LeetCode刷题记录】Pascal's Triangle
来源:互联网 发布:有百合网源码卖 编辑:程序博客网 时间:2024/05/21 06:32
题目:
Given numRows, generate the first numRows of Pascal’s triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解答:
帕斯卡三角,又名“杨辉三角”,基本规律是每一行的第一个和最后一个元素都是1,其它元素(第i个,1<i<n)等于上一行的两个元素(第i个和第(i+1)个)之和。公式很简单,关键是用什么数据结构去实现。
题目给出的返回值是vector<vector<int> >
,一直对C++的vector不太熟(惭愧惭愧,代码写太少)。这里给自己梳理一下vector的概念和用法:
vector可以看成是array,最明显的不同是vector支持动态调整容量,而array一般在声明时要求指定长度且不可变。因此,vector可视为自动扩展容量的数组。和数组一样,支持通过下标访问元素(常数时间O(1)),在集合尾端增加或删除元素也是花费常数时间O(1),若在vector集合中间增加或删除元素时间复杂度是线性时间O(n),较为费时。
在使用时,需要在头部引入”#include <vector>
“,它属于std命名空间。
常用方法包括:
- 访问元素
- vec[i]或vec.at(i)- 访问第i个元素,注意后者会进行边界检查
- vec.front()和vec.back() - 访问第一个和最后一个元素
- 新增或移除元素
- vec.push_back()和vec.pop_back - 新增和移除尾端元素
- vec.insert()、vec.erase()和vec.clear - 插入、删除指定元素,或清除所有元素
获取长度与容量
- vec.size() - 获取vector目前持有元素个数
- vec.capacity() - 返回vector可容纳的最大元素
- vec.resize() - 改变 vector 目前持有的元素个数。
迭代
- vec.begin() - 回传一个Iterator,它指向 vector 第一个元素。
- vec.end() - 回传一个Iterator,它指向 vector 最尾端元素的下一个位置(请注意:它不是最末元素)。
- vec.rbegin() - 回传一个反向Iterator,它指向 vector 最尾端元素的。
- vec.rend() - 回传一个Iterator,它指向 vector 的第一个元素。
啰嗦了这么多,直接上AC代码:
vector<vector<int> > generate(int numRows) { vector<vector<int> > result; result.resize(numRows); for (int i=0; i<numRows; i++) { result[i].resize(i+1);// dynamically resize vector's size // initialize each row's begin and end to 1 result[i][0] = 1; result[i][result[i].size()-1] = 1; for (int j=1; j<result[i].size()-1; j++) { result[i][j] = result[i-1][j-1] + result[i-1][j]; } } return result; }
参考链接:
1. 维基百科Vector (STL):http://zh.wikipedia.org/zh-cn/Vector_(STL)
2. 顺序容器:vector的自增长特性:http://www.xuebuyuan.com/2116818.html
- 【LeetCode刷题记录】Pascal's Triangle
- 【LeetCode刷题记录】Pascal's Triangle II
- Leetcode刷题记—— 118. Pascal's Triangle(杨辉三角形)
- 【Leetcode】Pascal's Triangle (Pascal)
- LeetCode Pascal's Triangle
- [Leetcode] Pascal's Triangle
- LeetCode: Pascal's Triangle
- [LeetCode] Pascal's Triangle
- 【leetcode】Pascal's Triangle
- LeetCode - Pascal's Triangle
- [LeetCode]Pascal's Triangle
- Leetcode: Pascal's Triangle
- Pascal's Triangle --Leetcode
- LeetCode-Pascal's Triangle
- [leetcode] Pascal's Triangle
- LeetCode - Pascal's Triangle
- 【leetcode】Pascal's Triangle
- LeetCode | Pascal's Triangle
- 在SQLite中使用事务
- YII2前端资源Assets
- 电脑上同时安装jdk1.7和jdk1.8时,转换jdk版本失效
- java web环境搭建
- linux下php加装mssql模块的方法
- 【LeetCode刷题记录】Pascal's Triangle
- 关于hibernate中的一些字段的解释@Transien
- 微营销好标题之情不自禁(微营销标题吸引粉丝篇-3)
- hdoj 2124 Repair the Wall
- Android百度地图学习笔记(一)
- Java反射--通过反射了解集合泛型的本质
- 【SQL Server 2008商务智能BI】数据挖掘导论
- Tomcat实现虚拟目录映射的方法
- C#派生类中如何定义属性控制基类事件,通过派生类属性直接操作基类事件