OpenCV材料表面缺陷检测程序源码解析与实战调参指南
2026/10/8 7:30:57
class Solution { public: vector<vector<int>> generate(int numRows) { int i = 0, j = 0; // dp[i] 表示杨辉三角的第 i 行 vector<vector<int>> dp(numRows); for(i = 0; i < numRows; i++){ // 第 i 行有 i+1 个元素 dp[i].resize(i + 1); // 每一行的第一个和最后一个元素都是 1 dp[i][0] = dp[i][i] = 1; // 计算当前行中间的元素 for(j = 1; j < i; j++){ // 当前元素 = 上一行左上 + 上一行右上 dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]; } } return dp; } };① 创建二维数组
vector<vector<int>> dp(numRows);相当于先创建numRows行:
dp[0] dp[1] dp[2] dp[3] ...但此时每一行还没有具体的元素。
② 决定每一行有几个元素
dp[i].resize(i + 1);例如:
i = 0 → dp[0] 有 1 个 i = 1 → dp[1] 有 2 个 i = 2 → dp[2] 有 3 个 i = 3 → dp[3] 有 4 个所以自然形成:
1 1 1 1 2 1 1 3 3 1③ 计算中间位置
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];比如计算:
1 2 1 ↘ ↙ 3就是:
dp[3][1] = dp[2][0] + dp[2][1];也就是:
3 = 1 + 2dp[i] → 第 i 行 dp[i][j] → 第 i 行第 j 个元素 resize(i+1) → 第 i 行开 i+1 个位置 两边 → 1 中间 → 上一行左上 + 上一行右上所以这道题实际上就是通过每一行长度逐渐增加构造出杨辉三角,再利用上一行计算当前行的中间元素。