【题目】
给定一个非负索引
rowIndex
,返回「杨辉三角」的第rowIndex
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
【示例】
示例 1:
输入: rowIndex = 3 输出: [1,3,3,1]示例 2:
输入: rowIndex = 0 输出: [1]示例 3:
输入: rowIndex = 1 输出: [1,1]
【解析】
1.思路和杨辉三角 I 一样 :
原文链接:https://blog.csdn.net/weixin_47267597/article/details/138442576
2.但是注意在创建数组的时候要创建 rowIndex+1 个数组,因为索引指向的数实际是第
rowIndex + 1 个数;
3.在「杨辉三角」中,每个数是它左上方和右上方的数的和;
4.第几行就有几个元素;
5.每一行的元素第一个与最后一个都为 1 ;
6.那么要得到当前位置的元素 i 就要获取当前位置 i 的前一个集合的 (i - 1)+( i ) 的值;
【代码】
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
//为什么要使用 rowIndex+1
//举例 rowIndex 为 3 ,则需要数组中有 4 行才能获取到索引为3的数组
for(int i=0; i<rowIndex+1 ; i++){
//每次都创建一个新的集合
List<Integer> list = new ArrayList<Integer>();
//第 i 行有 i 个元素
for(int j=0;j<=i;j++){
//如果是第一个或者最后一个元素,那么肯定等于 1
if(j==0 || j==i){
list.add(1);
}else{
//如果不是第一个或者最后一个元素
//那么则获取 上一行的第j-1个元素 + 第j个元素 之和
list.add(res.get(i-1).get(j-1) + res.get(i-1).get(j));
}
}
//每次将创建好的集合添加到大集合中
res.add(list);
}
//获取数组
return res.get(rowIndex);
}
}
【复杂度分析】
时间复杂度:O(n^2) , 使用了两个长度为 n 嵌套遍历;空间复杂度:O(n^2) , 使用了一个长度为 n 的大集合,每个大集合里都有长度为 n 的小集合;