119. 杨辉三角 II

思路:
注意一下给出的用例,最上方节点算是第0行,所以说,第三行的这个3,是下标,所以说有四个元素
方法一:
和上题一样的算法,不过,最后res.get
class Solution {
public List<Integer> getRow(int rowIndex) {//索引,等于索引加一层
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> a=new ArrayList<>(1);
//看笔记!!!
res.add(new ArrayList<>());
res.get(0).add(1);//顶部元素一定是1
if(rowIndex==0) return res.get(0);
for(int j=1;j<rowIndex+1;j++)//遍历所有的层
{
List<Integer> row=new ArrayList<>();//当前层,当前是第几层,就有几个数字!!容易忘掉
List<Integer> prerow=res.get(j-1);
row.add(1);//每一行第一个数字为1
for(int i=1;i<j;i++)//第j行最多j个元素,此行第n个元素等于上一行第n-1与n个元素之和
{
row.add(prerow.get(i)+prerow.get(i-1));//
}
row.add(1);//当前行最后一个元素
res.add(row);
}
return res.get(rowIndex);
}
}
方法2:
每次只保存上一层的结果就好
注意一下,因为参数其实是“下标”,比如说参数为3,求的其实是第四行,而且,下标为n时,这一行的List下标最多也就n个,比如第零行,下标0.第1行,下标0,1.。。。。。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> pre = new ArrayList<>();
List<Integer> cur = new ArrayList<>();
for(int i=0;i<=rowIndex;i++)//第0行,下标最多为0,第3行,下标0,1,2,3
{
cur=new ArrayList<Integer>();//每一次循环,代表当前行的List都要更新一下,
for(int j=0;j<=i;j++)
{
if (j == 0 || j == i) {
cur.add(1);
} else {
cur.add(pre.get(j - 1) + pre.get(j));
}
}
pre=new ArrayList<>(cur);//更新当前行
}
return cur;
}
}
方法3:

public List<Integer> getRow(int rowIndex) {
List<Integer> ans = new ArrayList<>();
int N = rowIndex;
for (int k = 0; k <= N; k++) {
ans.add(Combination(N, k));
}
return ans;
}
private int Combination(int N, int k) {
long res = 1;
for (int i = 1; i <= k; i++)
res = res * (N - k + i) / i;
return (int) res;
}
作者:windliang
链接:https://leetcode-cn.com/problems/pascals-triangle-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by--28/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


浙公网安备 33010602011771号