long[][] combinations(int n) {
long[][] choose = new long[n + 1][n + 1];
for (int i = 0; i <= n; i++) {
choose[i][0] = choose[i][i] = 1;
for (int j = 1; j < i; j++) choose[i][j] = choose[i - 1][j - 1] + choose[i - 1][j];
}
return choose;
}
def combinations(n: int) -> list[list[int]]:
choose = [[0] * (n + 1) for _ in range(n + 1)]
for i in range(n + 1):
choose[i][0] = choose[i][i] = 1
for j in range(1, i):
choose[i][j] = choose[i - 1][j - 1] + choose[i - 1][j]
return choose
def combinations(n: Int): Array[Array[Long]] =
val choose = Array.fill(n + 1, n + 1)(0L)
for i <- 0 to n do
choose(i)(0) = 1
choose(i)(i) = 1
for j <- 1 until i do choose(i)(j) = choose(i - 1)(j - 1) + choose(i - 1)(j)
choose
std::vector<std::vector<long long>> combinations(int n) {
std::vector<std::vector<long long>> choose(n + 1, std::vector<long long>(n + 1));
for (int i = 0; i <= n; i++) {
choose[i][0] = choose[i][i] = 1;
for (int j = 1; j < i; j++) choose[i][j] = choose[i - 1][j - 1] + choose[i - 1][j];
}
return choose;
}