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]
]
我是用数组做的,在草稿纸上稍微画一画应该就能找到数组下标的规律。
public List<List<Integer>> generate(int numRows) {
List<Integer> list = new ArrayList<Integer>();
List<List<Integer>> resultList = new ArrayList<List<Integer>>();
int[][] temp = new int[numRows][numRows];
for (int i = 0; i < numRows; i++) {
temp[i][0] = 1;
temp[i][i] = 1;
for (int j = 0; j <= i; j++) {
if (j < i && i > 1 && j > 0)
temp[i][j] = temp[i - 1][j - 1] + temp[i - 1][j];
list.add(temp[i][j]);
}
resultList.add(list);
list = new ArrayList<Integer>();
}
return resultList;
}
看了网上的解答:
public ArrayList<ArrayList<Integer>> generate(int numRows) {
ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>();
if (numRows == 0) {
return rst;
}
ArrayList<Integer> first = new ArrayList<Integer>();
first.add(0, 1);
rst.add(first);
for (int i = 1; i < numRows; i++) {
ArrayList<Integer> tmp = new ArrayList<Integer>(i + 1);
for (int j = 0; j < i + 1; j++){
tmp.add(-1);
}
ArrayList<Integer> prev = rst.get(i - 1);
tmp.set(0, prev.get(0));
tmp.set(i, prev.get(i - 1));
for (int j = 1; j < i; j++){
tmp.set(j, prev.get(j - 1)+prev.get(j));
}
rst.add(tmp);
}
return rst;
}
是不是还没有我的那个好,哈哈哈,一看就是三层for循环。