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 class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
if (numRows <= 0) {
return result;
}
for (int i = 0; i < numRows; i++) {
List<Integer> array = new ArrayList<>();
array.add(1);
if (i > 0) {
List<Integer> pre = result.get(i - 1);
int size = pre.size();
for (int j = 0; j < size; j++) {
if (j == size - 1) {
array.add(pre.get(j));
} else {
array.add(pre.get(j) + pre.get(j + 1));
}
}
}
result.add(array);
}
return result;
}
}
看了top solution后的改进版本,减少了条件判断:
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
if (numRows <= 0) {
return result;
}
for (int i = 0; i < numRows; i++) {
List<Integer> array = new ArrayList<>();
for (int j = 0; j < i + 1; j++) {
if (j == 0 || j == i) {
array.add(1);
} else {
List<Integer> pre = result.get(i - 1);
array.add(pre.get(j - 1) + pre.get(j));
}
}
result.add(array);
}
return result;
}
}
但看了另一个top solution还是觉得可能自己就是写不好代码了。。。= =?
但也许我写的比较快一点吧?并不好判断。。。
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> array = new ArrayList<>();
if (numRows <= 0) {
return result;
}
for (int i = 0; i < numRows; i++) {
array.add(0, 1);
for (int j = 1; j < array.size() - 1; j++) {
array.set(j, array.get(j) + array.get(j + 1));
}
result.add(new ArrayList<>(array));
}
return result;
}
}
附上c++的解法,和第一种解法的改进版是一样的:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> r(numRows);
for (int i = 0; i < numRows; i++) {
r[i].resize(i + 1);
r[i][0] = 1, r[i][i] = 1;
for (int j = 1; j < i; j++) {
r[i][j] = r[i - 1][j - 1] + r[i - 1][j];
}
}
return r;
}
};
这么一看c++还真的挺简洁的。