def pascal_triangle(n: int):
if n <= 0:
return []
result = []
row = [1]
for r in range(1, n+1):
# r-th row (1-indexed) is 'row'
result.append(row.copy())
# build next row
next_row = [1]
for i in range(1, len(row)):
next_row.append(row[i-1] + row[i])
next_row.append(1)
row = next_row
return result
# Examples:
# print(pascal_triangle(4)) -> [[1], [1,1], [1,2,1], [1,3,3,1]]
# print(pascal_triangle(5)) -> [[1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]
ZGVmIHBhc2NhbF90cmlhbmdsZShuOiBpbnQpOgogICAgaWYgbiA8PSAwOgogICAgICAgIHJldHVybiBbXQogICAgcmVzdWx0ID0gW10KICAgIHJvdyA9IFsxXQogICAgZm9yIHIgaW4gcmFuZ2UoMSwgbisxKToKICAgICAgICAjIHItdGggcm93ICgxLWluZGV4ZWQpIGlzICdyb3cnCiAgICAgICAgcmVzdWx0LmFwcGVuZChyb3cuY29weSgpKQogICAgICAgICMgYnVpbGQgbmV4dCByb3cKICAgICAgICBuZXh0X3JvdyA9IFsxXQogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihyb3cpKToKICAgICAgICAgICAgbmV4dF9yb3cuYXBwZW5kKHJvd1tpLTFdICsgcm93W2ldKQogICAgICAgIG5leHRfcm93LmFwcGVuZCgxKQogICAgICAgIHJvdyA9IG5leHRfcm93CiAgICByZXR1cm4gcmVzdWx0CgojIEV4YW1wbGVzOgojIHByaW50KHBhc2NhbF90cmlhbmdsZSg0KSkgLT4gW1sxXSwgWzEsMV0sIFsxLDIsMV0sIFsxLDMsMywxXV0KIyBwcmludChwYXNjYWxfdHJpYW5nbGUoNSkpIC0+IFtbMV0sIFsxLDFdLCBbMSwyLDFdLCBbMSwzLDMsMV0sIFsxLDQsNiw0LDFdXQo=