LeetCode解题 118:Pascal's Triangle
Problem 118: Pascal’s Triangle [Easy]
Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
来源:LeetCode
解题思路
杨辉三角中每一层的第j个数只需用到上一层的第j-1和第j个数,因此很容易想到每轮只需留存上一层的结果,以此计算当前层。
公式为:
n
u
m
(
i
,
j
)
=
{
1
j
=
0
;
1
j
=
i
;
n
u
m
(
i
−
1
,
j
−
1
)
+
n
u
m
(
i
−
1
,
j
)
o
t
h
e
r
w
i
s
e
.
num(i, j) = \begin{cases} 1 & j = 0;\\ 1 & j = i;\\ num(i-1, j-1) + num(i-1, j) & otherwise. \end{cases}
num(i,j)=⎩⎪⎨⎪⎧11num(i−1,j−1)+num(i−1,j)j=0;j=i;otherwise.
其中,
n
u
m
(
i
,
j
)
num(i,j)
num(i,j)代表第
i
i
i层第
j
j
j个数。
Solution (Java)
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(numRows == 0) return result;
List<Integer> last = new ArrayList<Integer>();
for(int i = 0; i < numRows; i++){
List<Integer> num = new ArrayList<Integer>();
num.add(1);
for(int j = 1; j < i; j++){
num.add(last.get(j-1)+last.get(j));
}
if(i > 0){
num.add(1);
}
result.add(num);
last = num;
}
return result;
}
}