File tree Expand file tree Collapse file tree 2 files changed +35
-2
lines changed
contest/src/main/java/com/github/contest Expand file tree Collapse file tree 2 files changed +35
-2
lines changed Original file line number Diff line number Diff line change 1
1
package com.github.contest
2
2
3
- import com.github.contest.backtracking.getHappyString
3
+ import com.github.contest.backtracking.getHappyStringProdVariant
4
4
5
5
6
6
/* *
@@ -9,7 +9,7 @@ import com.github.contest.backtracking.getHappyString
9
9
10
10
fun main () {
11
11
12
- getHappyString (3 , 9 ).also { println (it) }
12
+ getHappyStringProdVariant (3 , 9 ).also { println (it) }
13
13
14
14
15
15
}
Original file line number Diff line number Diff line change @@ -22,4 +22,37 @@ private fun isPunishment(num: Int): Boolean {
22
22
}
23
23
24
24
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 )
25
58
}
You can’t perform that action at this time.
0 commit comments