Tam giác Pascal sườn là một mô hình của tam giác dựa trên NCR, dưới đây là biểu diễn hình ảnh của Tam giác Pascal.
Example:
Input: N = 5 Output: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
Phương pháp 1: Sử dụng công thức NCR, tức là N!/[N-R]! R!Using nCr formula i.e. n!/[n-r]!r!
Sau khi sử dụng công thức NCR, biểu diễn hình ảnh trở thành:
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C3
Algorithm:
- Lấy một số hàng để được in, giả sử nó là n
- Làm cho phép lặp bên ngoài I từ 0 đến n lần để in các hàng.
- Tạo lần lặp bên trong cho J từ 0 đến [n - 1].
- In không gian trống đơn.
- Đóng vòng bên trong [vòng J] // nó cần thiết cho khoảng cách bên trái.
- Tạo lần lặp bên trong cho J từ 0 đến i.
- In NCR của I và J.
- Đóng vòng bên trong.
- In ký tự dòng mới [\ n] sau mỗi lần lặp bên trong.
Implementation:
Python3
from
math
import
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C30
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C31
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C33
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C35
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C38
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
1 1 1 1 2 1 1 3 3 1 1 4 6 4 14
1 1 1 1 2 1 1 3 3 1 1 4 6 4 15
1 1 1 1 2 1 1 3 3 1 1 4 6 4 16
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 19
C[line, i] = C[line, i-1] * [line - i + 1] / i0
C[line, i] = C[line, i-1] * [line - i + 1] / i1
C[line, i] = C[line, i-1] * [line - i + 1] / i2
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
C[line, i] = C[line, i-1] * [line - i + 1] / i4
C[line, i] = C[line, i-1] * [line - i + 1] / i5
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 19
C[line, i] = C[line, i-1] * [line - i + 1] / i0
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13310
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13311
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13312
1 1 1 1 2 1 1 3 3 1 1 4 6 4 15
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13314
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
C[line, i] = C[line, i-1] * [line - i + 1] / i4
C[line, i] = C[line, i-1] * [line - i + 1] / i5
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 10
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
Độ phức tạp về thời gian: O [N2] Không gian phụ trợ: O [1] O[N2]
Auxiliary space: O[1]
Phương pháp 2: Chúng ta có thể tối ưu hóa mã trên bằng khái niệm sau đây về hệ số nhị thức, mục nhập I'th trong một dòng dòng là hệ số nhị thức c [dòng, i] và tất cả các dòng bắt đầu với giá trị 1. Ý tưởng là tính toán C [dòng, i] sử dụng C [dòng, I-1].We can optimize the above code by the following concept of a Binomial Coefficient, the i’th entry in a line number line is Binomial Coefficient C[line, i] and all lines start with value 1. The idea is to calculate C[line, i] using C[line, i-1].
C[line, i] = C[line, i-1] * [line - i + 1] / i
Implementations:
Python3
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C31
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C33
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C35
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C38
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
1 1 1 1 2 1 1 3 3 1 1 4 6 4 14
1 1 1 1 2 1 1 3 3 1 1 4 6 4 15
1 1 1 1 2 1 1 3 3 1 1 4 6 4 16
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 19
C[line, i] = C[line, i-1] * [line - i + 1] / i0
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
import
0import
10C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
import
30C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 19
Độ phức tạp về thời gian: O [N2] Không gian phụ trợ: O [1]
C[line, i] = C[line, i-1] * [line - i + 1] / i0
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
import
00C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C313
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C315
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C316
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C317
Phương pháp 2: Chúng ta có thể tối ưu hóa mã trên bằng khái niệm sau đây về hệ số nhị thức, mục nhập I'th trong một dòng dòng là hệ số nhị thức c [dòng, i] và tất cả các dòng bắt đầu với giá trị 1. Ý tưởng là tính toán C [dòng, i] sử dụng C [dòng, I-1].
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 10
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
5 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
6 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
7 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
8 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
8from
0 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
7 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
8 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
9 O[N2]
Auxiliary Space: O[1]
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
9 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
6 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
7 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
8math
0from
0 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
5 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
6 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
7__28____29 This is the most optimized approach to print Pascal’s triangle, this approach is based on powers of 11.
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 1331
Implementation:
Python3
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C31
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C33
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C35
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C38
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
import
011**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13311
1 1 1 1 2 1 1 3 3 1 1 4 6 4 14
1 1 1 1 2 1 1 3 3 1 1 4 6 4 15
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C347
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C32
import
30C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
C[line, i] = C[line, i-1] * [line - i + 1] / i1
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
import
00C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C354
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C355
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C357
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C358
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C357
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C361
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13311
11**0 = 1 11**1 = 11 11**2 = 121 11**3 = 13311
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C364
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
9 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
6 0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
7 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
4 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
5 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
6 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
7 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
8 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
9O[N]
Auxiliary Space: O[1]
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C39
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C34
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C36
0C0 1C0 1C1 2C0 2C1 2C2 3C0 3C1 3C2 3C37
1 1 1 1 2 1 1 3 3 1 1 4 6 4 11
1 1 1 1 2 1 1 3 3 1 1 4 6 4 17
1 1 1 1 2 1 1 3 3 1 1 4 6 4 18
1 1 1 1 2 1 1 3 3 1 1 4 6 4 19