题目描述
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] ]
杨辉三角问题,我的想法简单直接(好像一直都是),取出上一个计算结果的最后一个元素,计算出现新加入的list,连同之前的结果一起加入到最终的结果中。
于是洋洋洒洒有了如下代码:
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> generate(int numRows) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>> ();
if(numRows == 0)
return res;
if(numRows == 1){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
res.add(list);
return res;
}
ArrayList<ArrayList<Integer>> pre = generate(numRows-1);
ArrayList<Integer> temp = pre.get(pre.size()-1);
temp.add(1);
for(int i=0; i<temp.size()-1; i++) {
temp.add(temp.get(i)+temp.get(i+1));
}
temp.add(1);
for(int i=0; i<pre.size(); i++){
res.add(pre.get(i));
}
res.add(temp);
return res;
}
}
一运行:
尴尬窒息。
于是我看了通过最好的一位同学的代码:
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer>> generate(int numRows) {
ArrayList<ArrayList<Integer>> triangle=new ArrayList<ArrayList<Integer>>();
if(numRows <= 0) return triangle;
for(int i=0;i<numRows;i++){
ArrayList<Integer> currentLevel = new ArrayList<Integer>();
currentLevel.add(1);//每一层第一位
if(i>0){
//根据上一层宽度进行循环,由于本层两端的数字已经定下为1,所以本层需要计算的次数=上层宽度-1
for(int j=0;j<triangle.get(i-1).size()-1;j++){
currentLevel.add(triangle.get(i-1).get(j)+triangle.get(i-1).get(j+1));
}
currentLevel.add(1);//每一层最后一位
}
triangle.add(currentLevel);
}
return triangle;
}
}
我发现了,我是没做一次,就生成了一个ArrayList,这是不对的,应该就只能有一个arraylist。