杨辉三角,又称帕斯卡三角形(Pascal's Triangle),是组合数学中的一个重要概念。它是一个三角形数组,其中每个数字是它上方左上方和右上方的数字之和。杨辉三角的每一行都代表了二项式展开式的系数,因此在数学和计算机科学中有着广泛的应用。
杨辉三角不仅在数学中有着深厚的理论意义,还在计算机科学中有着广泛的应用,如动态规划、组合数学问题的解决等。同时,杨辉三角也是许多数学竞赛和编程竞赛中的常见题目。
题目描述:
题号:118
解题思路:
思路一:动态规划
每个数字都是它左上方和右上方的数字之和。可以通过迭代的方式逐行生成杨辉三角。
时间复杂度:O( numRows^2 )
空间复杂度:O( numRows^2 )
C++
// C++
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> triangle; for (int i = 0; i < numRows; ++i) { vector<int> row(i + 1, 1); for (int j = 1; j < i; ++j) { row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; } triangle.push_back(row); } return triangle;}
};
go
// go
func generate(numRows int) [][]int { triangle := make([][]int, 0, numRows) for i := 0; i < numRows; i++ { row := make([]int, i+1) row[0], row[i] = 1, 1 for j := 1; j < i; j++ { row[j] = triangle[i-1][j-1] + triangle[i-1][j] } triangle = append(triangle, row) } return triangle
}