comments | difficulty | edit_url | rating | source | tags | |||||
---|---|---|---|---|---|---|---|---|---|---|
true |
Medium |
1369 |
Weekly Contest 401 Q2 |
|
You are given two integers n
and k
.
Initially, you start with an array a
of n
integers where a[i] = 1
for all 0 <= i <= n - 1
. After each second, you simultaneously update each element to be the sum of all its preceding elements plus the element itself. For example, after one second, a[0]
remains the same, a[1]
becomes a[0] + a[1]
, a[2]
becomes a[0] + a[1] + a[2]
, and so on.
Return the value of a[n - 1]
after k
seconds.
Since the answer may be very large, return it modulo 109 + 7
.
Example 1:
Input: n = 4, k = 5
Output: 56
Explanation:
Second | State After |
---|---|
0 | [1,1,1,1] |
1 | [1,2,3,4] |
2 | [1,3,6,10] |
3 | [1,4,10,20] |
4 | [1,5,15,35] |
5 | [1,6,21,56] |
Example 2:
Input: n = 5, k = 3
Output: 35
Explanation:
Second | State After |
---|---|
0 | [1,1,1,1,1] |
1 | [1,2,3,4,5] |
2 | [1,3,6,10,15] |
3 | [1,4,10,20,35] |
Constraints:
1 <= n, k <= 1000
We notice that the range of the integer
We define an array
Finally, we return
The time complexity is
class Solution:
def valueAfterKSeconds(self, n: int, k: int) -> int:
a = [1] * n
mod = 10**9 + 7
for _ in range(k):
for i in range(1, n):
a[i] = (a[i] + a[i - 1]) % mod
return a[n - 1]
class Solution {
public int valueAfterKSeconds(int n, int k) {
final int mod = (int) 1e9 + 7;
int[] a = new int[n];
Arrays.fill(a, 1);
while (k-- > 0) {
for (int i = 1; i < n; ++i) {
a[i] = (a[i] + a[i - 1]) % mod;
}
}
return a[n - 1];
}
}
class Solution {
public:
int valueAfterKSeconds(int n, int k) {
const int mod = 1e9 + 7;
vector<int> a(n, 1);
while (k-- > 0) {
for (int i = 1; i < n; ++i) {
a[i] = (a[i] + a[i - 1]) % mod;
}
}
return a[n - 1];
}
};
func valueAfterKSeconds(n int, k int) int {
const mod int = 1e9 + 7
a := make([]int, n)
for i := range a {
a[i] = 1
}
for ; k > 0; k-- {
for i := 1; i < n; i++ {
a[i] = (a[i] + a[i-1]) % mod
}
}
return a[n-1]
}
function valueAfterKSeconds(n: number, k: number): number {
const a: number[] = Array(n).fill(1);
const mod: number = 10 ** 9 + 7;
while (k--) {
for (let i = 1; i < n; ++i) {
a[i] = (a[i] + a[i - 1]) % mod;
}
}
return a[n - 1];
}