动态规化
使用一个列表保存杨辉三角每一行的值,初始化第0行为[1]
,后面的几行都可以由前一行计算得到,最后返回最后一行。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<List<Integer>> dp = new ArrayList<>();
dp.add(new ArrayList<>());
dp.get(0).add(1);
for(int i = 1; i < rowIndex+1; i++){
List<Integer> row = new ArrayList<>();
List<Integer> preRow = dp.get(i-1);
row.add(1);
for(int j = 1; j < i; j++){
row.add(preRow.get(j)+preRow.get(j-1));
}
row.add(1);
dp.add(row);
}
return dp.get(rowIndex);
}
}
由于每次只用到前一行这个状态所以可以只使用一个变量preRow保存前一行状态,这样优化了空间复杂度。
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> preRow = new ArrayList<>();
preRow.add(1);
for(int i = 1; i < rowIndex+1; i++){
List<Integer> row = new ArrayList<>();
row.add(1);
for(int j = 1; j < i; j++){
row.add(preRow.get(j)+preRow.get(j-1));
}
row.add(1);
preRow = row;
}
return preRow;
}
}
下面是递归的写法,简单易懂
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> row = new ArrayList<>();
if(rowIndex == 0){
row.add(1);
return row;
}else{
List<Integer> preRow = getRow(rowIndex - 1);
row.add(1);
for(int i = 1; i < rowIndex; i++){
row.add(preRow.get(i)+preRow.get(i-1));
}
row.add(1);
}
return row;
}
}