Skip to content

Commit 5b2f465

Browse files
authored
Create 1866-number-of-ways-to-rearrange-sticks-with-k-sticks-visible.kt
1 parent 69a73b6 commit 5b2f465

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Dp bottom up
2+
class Solution {
3+
fun rearrangeSticks(n: Int, k: Int): Int {
4+
val mod = 1_000_000_000 + 7
5+
val dp = Array (n + 1) { LongArray (k + 1) }
6+
7+
dp[1][1] = 1
8+
for (i in 2..n) {
9+
for (j in 1..k) {
10+
dp[i][j] = (dp[i - 1][j - 1] + ((i - 1) * dp[i - 1][j])) % mod
11+
}
12+
}
13+
14+
return dp[n][k].toInt()
15+
}
16+
}
17+
18+
// Recursion + memoization
19+
class Solution {
20+
fun rearrangeSticks(n: Int, k: Int): Int {
21+
val mod = 1_000_000_000 + 7
22+
val dp = Array (n + 1) { LongArray (k + 1) { -1L } }
23+
24+
fun dfs(n: Int, k: Int): Long {
25+
if (n == k) return 1
26+
if (n == 0 || k == 0) return 0
27+
if (dp[n][k] != -1L) return dp[n][k]
28+
29+
dp[n][k] = dfs(n - 1, k - 1) + ((n - 1) * dfs(n - 1, k))
30+
31+
return dp[n][k] % mod
32+
}
33+
34+
return dfs(n, k).toInt()
35+
}
36+
}

0 commit comments

Comments
 (0)