Skip to content

Commit b694f30

Browse files
add 1415
1 parent d751adf commit b694f30

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

contest/src/main/java/com/github/contest/Execute.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.contest
22

3-
import com.github.contest.backtracking.getHappyString
3+
import com.github.contest.backtracking.getHappyStringProdVariant
44

55

66
/**
@@ -9,7 +9,7 @@ import com.github.contest.backtracking.getHappyString
99

1010
fun main() {
1111

12-
getHappyString(3, 9).also { println(it) }
12+
getHappyStringProdVariant(3, 9).also { println(it) }
1313

1414

1515
}

contest/src/main/java/com/github/contest/backtracking/BacktrackingProdVariant.kt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,37 @@ private fun isPunishment(num: Int): Boolean {
2222
}
2323

2424
return backtrack(0, 0)
25+
}
26+
27+
/**
28+
* 1415. The k-th Lexicographical String of All Happy Strings of Length n
29+
*/
30+
31+
32+
fun getHappyStringProdVariant(n: Int, k: Int): String {
33+
val result = StringBuilder()
34+
val chars = setOf('a', 'b', 'c')
35+
var count = 0
36+
fun generateHappyString(current: StringBuilder) {
37+
if (current.length == n) {
38+
count++
39+
if (count == k) result.append(current.toString())
40+
return
41+
}
42+
43+
if (count >= k) return
44+
45+
chars.filter { current.isEmpty() || current.last() != it }.forEach {
46+
current.append(it)
47+
generateHappyString(current)
48+
current.deleteLast()
49+
}
50+
}
51+
52+
generateHappyString(StringBuilder())
53+
return result.toString()
54+
}
55+
56+
private fun StringBuilder.deleteLast() {
57+
if (isNotEmpty()) deleteCharAt(this.length - 1)
2558
}

0 commit comments

Comments
 (0)