题目链接:https://leetcode.com/problems/pascals-triangle-ii/
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
基本思路:
1. 关于什么是Pascals-triangle以及性质可以参考 LeetCode 118. Pascal's Triangle 这篇文章
2. 解题思路:
为了确保空间复杂度为 O(k) ,方法是首先建立一个预留长度的k的列表,然后用k次循环对列表进行更新。每个更新的任务有两个,第一个是增加列表的长度,也就是在列表的最右侧插入一个元素1,第二是更新列表最右侧和最左侧之间的数据,因为更新是从左向右进行的,当右边元素的更新需要用到更新前左边元素信息时,左边元素已经完成更新了,因此需要一个tmp变量来保存更新前左边元素的信息,用于右边元素使用。
提交代码:
(初级代码):
public class Solution {public List<Integer> getRow(int rowIndex) {
rowIndex++; //题目默认Pascal's triangle从第0行开始
List<Integer> Pascal_row = new ArrayList<Integer>(rowIndex);
for (int i = 0; i < rowIndex; i++) { //每一轮更新列表
int tmp = 1; //初始左边元素为1
for (int j = 1; j < i; j++) { //从左到右更新元素
int sum = tmp + Pascal_row.get(j); //利用Pascal's triangle的性质
tmp = Pascal_row.get(j); // 保存更新前内容
Pascal_row.set(j, sum); // 更新
}
Pascal_row.add(1); //增加1到最右边元素
}
return Pascal_row;
}
}