// leetcode 118
// // //方法1,定义二位列表,初始值都是1,每个位置按照索引,修改值
// class Solution {
// public:
// vector<vector<int>> generate(int numRows) {
// // vector<vector<int>> out;
// vector<vector<int>> out(numRows);//定义二维动态数组大小numRows行多少列不知
// //循环赋值数组大小和初始值1
// for (int i=0;i<numRows;i++){
// out[i]=vector<int>(i+1,1); //元素个数i+1个初始值1,这种方法定义了数组长度,就不用push_back
// }
// if (numRows<=2) return out;//第一项第二项都是1,从第三项开始进行加的操作,
// for (int i = 2;i<numRows;i++){
// for (int j=1;j<out[i-1].size();j++){//j是每个字符串的索引倒数第二个数字结束,这是从numRows=3,开始的计算,它的前一个值是11
// out[i][j] = out[i-1][j-1]+out[i-1][j];
// }
// }
// return out;
// }
// };
// / 方法2 push_back
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ret;//空的动态二维数组
for (int i = 0; i < numRows; i++) {
ret.push_back(vector<int>());
ret[i].push_back(1);;//每次第一个元素添加1
for (int j = 0; j < i - 1; j++) { //i==2走这个循环然后j倒第二个结束,
ret[i].push_back(ret[i - 1][j] + ret[i - 1][j + 1]);
}
if (i >0) ret[i].push_back(1);除了第一个数字1,以外,最后添加1,结束
}
return ret;
}
};
关于C++中vector<vector >的使用
https://www.cnblogs.com/tyty-Somnuspoppy/p/9361821.html
(转载以上连接内容)
1、定义
vector<vector> A;//错误的定义方式
vector<vector > A;//正确的定义方式
2、插入元素
若想定义A = [[0,1,2],[3,4]],有两种方法。
(1)定义vector B分别为[0,1,2]和[3,4],然后放入vector A。
vector<vector > A;
vector B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear();
B.push_back(3);
B.push_back(4);
A.push_back(B);
(2)
vector<vector > A;
for(int i = 0; i < 2; ++i) A.push_back(vector());
A[0].push_back(0);
A[0].push_back(1);
A[0].push_back(2);
A[1].push_back(3);
A[1].push_back(4);
3、长度
//vector<vector >A中的vector元素的个数
len = A.size();
//vector<vector >A中第i个vector元素的长度
len = A[i].size();
4、访问某元素
访问某元素时,方法和二维数组相同,例如:
//根据前面的插入,可知输出1。
printf("%d\n", A[0][1]);