119. Pascal's Triangle II
原题链接:https://leetcode.com/problems/pascals-triangle-ii/description/
杨辉三角问题二,问题一虽然简单到我都实现了,问题二我也实现了,只是不太符合题目中所要求的空间复杂度罢了,后面参考了下别人的答案吧:
import java.util.ArrayList;
import java.util.List;
/**
* Created by clearbug on 2018/2/26.
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.getRow3(0));
System.out.println(s.getRow3(1));
System.out.println(s.getRow3(2));
System.out.println(s.getRow3(3));
System.out.println(s.getRow3(4));
}
/**
* 方法一:我自己的实现,空间复杂度貌似比要求的高了,效率也不高
*
* @param rowIndex
* @return
*/
public List<Integer> getRow(int rowIndex) {
List<Integer> pre = new ArrayList<>();
pre.add(1);
if (rowIndex == 0) {
return pre;
}
for (int i = 2; i <= rowIndex + 1; i++) {
List<Integer> current = new ArrayList<>(i);
for (int j = 0; j < i; j++) {
if ((j - 1) >= 0 && j < pre.size()) {
current.add(pre.get(j - 1) + pre.get(j));
}
if ((j - 1) >= 0 && j >= pre.size()) {
current.add(pre.get(j - 1));
}
if ((j - 1) < 0 && j < pre.size()) {
current.add(pre.get(j));
}
}
pre = current;
}
return pre;
}
/**
* 方法二:别人提交的高效率的答案,但是我完全没看懂。。。
* @param rowIndex
* @return
*/
public List<Integer> getRow2(int rowIndex) {
List<Integer> row = new ArrayList<>();
if (rowIndex < 0) {
return row;
}
row.add(1);
int n = rowIndex;
int k = 1;
long val = n / k;
while (k <= rowIndex) {
row.add((int) val);
n--;
k++;
val = val * n;
val = val / k;
}
return row;
}
/**
* 方法三:优化空间复杂度,讨论区别人的答案,确实不错哦,这个比方法二好理解
*
* @param rowIndex
* @return
*/
public List<Integer> getRow3(int rowIndex) {
List<Integer> row = new ArrayList<>(rowIndex + 1);
if (rowIndex < 0) {
return row;
}
for (int i = 0; i < rowIndex + 1; i++) {
row.add(0, 1);
for (int j = 1; j < row.size() - 1; j++) {
row.set(j, row.get(j) + row.get(j + 1));
}
}
return row;
}
}