leetcode 精选top面试题 - 118. 杨辉三角

该博客介绍了如何使用Java实现杨辉三角的生成,代码中通过迭代方式,根据上一行计算下一行的每个元素,并考虑首尾为1的特殊情况。算法执行时间为1ms,在Java提交中击败了66.94%的用户,空间复杂度为O(n),因为每次只保存一行数据。文章还分析了算法的时间复杂度为O(n^2)和空间复杂度为O(n)。
摘要由CSDN通过智能技术生成

118. 杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

 

在杨辉三角中,每个数是它左上方和右上方的数的和

示例:

输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

思路:

杨辉三角,知道上一行就可以求出下一行,但是注意每行的首尾元素都是1,需要单独添加

 1 class Solution {
 2     public List<List<Integer>> generate(int numRows) {
 3         List<List<Integer>> res = new ArrayList<>();
 4         if(numRows <= 0){
 5             return res;
 6         }
 7         List<Integer> temp = new ArrayList<Integer>();
 8         temp.add(1);
 9 
10         res.add(temp);
11         for(int i = 1; i < numRows; i++){
12             List<Integer> nextRowList = new ArrayList<Integer>();
13             nextRowList.add(1);
14             for(int j = 0; j < temp.size() - 1; j++){
15                 // 遍历上一行的每个元素,生成一个新元素添加到nextRowList中    
16                 nextRowList.add(temp.get(j) + temp.get(j + 1));
17             }
18             nextRowList.add(1);
19             res.add(new ArrayList<Integer>(nextRowList));
20             temp = nextRowList;     // 更新temp
21         }
22         return res;
23     }
24 }
leetcode 执行用时:1 ms, 在所有 Java 提交中击败了66.94%的用户
内存消耗:36.2 MB, 在所有 Java 提交中击败了80.37%的用户

复杂度分析:

时间复杂度:O(n2)。双重循环,但是内层循环的迭代次数分别是1, 2, 3,.., n; 所以时间复杂度为O(1 + 2 + 3 + n) = O((n2+n)/2), 所以时间复杂度为O(n2)。
空间复杂度:O(n)。如果不考虑存储结果的列表集合,算法需要一个存放上一行的结果的列表,但是这个列表在使用完之后就会被回收,所以只需要计算一次,则空间复杂度为O(n)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值