题目:
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
思路:经典的DP
代码:
List<List<Integer>> reList = new ArrayList<List<Integer>>();
if(numRows==0)
return reList;
List<Integer> line_one = new ArrayList<Integer>();
line_one.add(1);
reList.add(line_one);
for(int i=2;i<=numRows;i++){
List<Integer> last_row = reList.get(i-2);
List<Integer> cur_row = new ArrayList<Integer>();
for(int j=1;j<=i;j++){
if(j==1)
cur_row.add(last_row.get(0));
else if(j==i)
cur_row.add(last_row.get(j-2));
else
cur_row.add(last_row.get(j-2)+last_row.get(j-1));
}
reList.add(cur_row);
}
return reList;
改进:row.add(0,1) 每次在头加一个1,再累加
numRows=3: [1] -> [1,1] -> [1,1,1] [1,2,1] -> [1,1,2,1] [1,3,3,1]
public List<List<Integer>> generate(int numRows)
{
List<List<Integer>> allrows = new ArrayList<List<Integer>>();
ArrayList<Integer> row = new ArrayList<Integer>();
for(int i=0;i<numRows;i++)
{
row.add(0, 1);
for(int j=1;j<row.size()-1;j++)
row.set(j, row.get(j)+row.get(j+1));
allrows.add(new ArrayList<Integer>(row));
}
return allrows;
}
题目:
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
Note:
Could you optimize your algorithm to use only O(k) extra space?
思路:用上题中改进后的思路,很容易就能解决
代码:
public List<Integer> getRow(int rowIndex) {
List<Integer> re = new ArrayList<>();
for(int i=0;i<=rowIndex;i++){
re.add(0, 1);
for(int j=1;j<re.size()-1;j++){
re.set(j, re.get(j)+re.get(j+1));
}
}
return re;
}