Medium
You have n
tiles
, where each tile has one letter tiles[i]
printed on it.
Return the number of possible non-empty sequences of letters you can make using the letters printed on those tiles
.
Example 1:
Input: tiles = “AAB”
Output: 8
Explanation: The possible sequences are “A”, “B”, “AA”, “AB”, “BA”, “AAB”, “ABA”, “BAA”.
Example 2:
Input: tiles = “AAABBC”
Output: 188
Example 3:
Input: tiles = “V”
Output: 1
Constraints:
1 <= tiles.length <= 7
tiles
consists of uppercase English letters.class Solution {
private var count = 0
fun numTilePossibilities(tiles: String): Int {
count = 0
val chars = tiles.toCharArray()
chars.sort()
val visited = BooleanArray(chars.size)
dfs(chars, 0, visited)
return count
}
private fun dfs(chars: CharArray, length: Int, visited: BooleanArray) {
if (length == chars.size) {
return
}
for (i in chars.indices) {
if (visited[i] || i - 1 >= 0 && chars[i] == chars[i - 1] && !visited[i - 1]) {
continue
}
count++
visited[i] = true
dfs(chars, length + 1, visited)
visited[i] = false
}
}
}