问题:
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0
输出: [1]
示例 3:
输入: rowIndex = 1
输出: [1,1]
提示:
0 <= rowIndex <= 33
解答思路:
以下是使用 Java 语言解决此问题的步骤:
1. 分析题目
- 我们需要返回「杨辉三角」的第 rowIndex 行。
- 「杨辉三角」是一个二维数组,其中每个数是它左上方和右上方的数的和。
2. 选择合适的解法
- 我们可以使用动态规划的方法来解决此问题。我们可以创建一个二维数组来存储「杨辉三角」的每一行。然后,我们可以使用两个嵌套的循环来计算每一行的每个数。
3. 代码实现
- 以下是使用动态规划解决此问题的 Java 代码:
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> triangle = new ArrayList<>();
for (int i = 0; i <= rowIndex; i++) {
List<Integer> row = new ArrayList<>();
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(triangle.get(i - 1).get(j - 1) + triangle.get(i - 1).get(j));
}
}
triangle.add(row);
}
return triangle.get(rowIndex);
}
}
4. 解释代码
- 我们首先创建一个二维数组 `triangle` 来存储「杨辉三角」的每一行。
- 然后,我们使用两个嵌套的循环来计算每一行的每个数。
- 如果 `j` 等于 0 或 `j` 等于 `i`,则将 1 添加到当前行中。
- 否则,我们将当前行的第 `j` 个数设置为上一行的第 `j-1` 个数和第 `j` 个数的和。
- 最后,我们返回第 `rowIndex` 行。
5. 测试代码
- 你可以使用以下代码测试上述解决方案:
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
List<Integer> row = solution.getRow(3);
for (Integer num : row) {
System.out.print(num + " ");
}
}
}
6. 最终答案
- 运行上述代码,将输出:
1 3 3 1
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)