link: https://leetcode.com/problems/pascals-triangle/
Solution:
动态规划
row[i] = preRow[i-1] + preRow[i]
class Solution {
public List<List<Integer>> generate(int numRows) {
List<Integer> in = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
if(numRows == 0) {
return res;
}
if(numRows >= 1) {
for(int i=0; i<numRows; i++){
in.clear();
for(int j=0; j<=i; j++){
if(j == 0 || j == i) {
in.add(1);
if(i == 0) break;
}else{
int c = temp.get(j-1) + temp.get(j);
in.add(c);
}
}
// KEY point: 每一次在res中加入元素,都需要新创建一个位置并加入in中的所有元素
// 如果仅仅使用res.add(in),res中存放的是指向in的指针,内容会根据in的变化而变化
res.add(new ArrayList<>());
res.get(i).addAll(in);
temp.clear();
temp.addAll(in);
}
}
return res;
}
}
TC: O(n2)
SC: O(n2)