Skip to content

Instantly share code, notes, and snippets.

@hendrawd
Created May 10, 2019 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hendrawd/ece8e73f9b66d354782773903a9da412 to your computer and use it in GitHub Desktop.
Save hendrawd/ece8e73f9b66d354782773903a9da412 to your computer and use it in GitHub Desktop.
Permutasi String dengan Metode Rekursif Menggunakan Bahasa Pemrograman Kotlin
import java.util.*
fun main(args: Array<String>) {
println("Masukkan Kata/String")
// Mendapatkan kata dari
val word = Scanner(System.`in`).next()
// Membuat list kosong
val indices = mutableListOf<Int>()
// Mendapatkan semua permutasi dari string tersebut
val permutations = getPermutations(word, indices)
// Menampilkan semua permutasi
println(permutations)
}
private fun getPermutations(word: String, indices: MutableList<Int>): MutableList<String> {
// Membuat list kosong sebagai return
val toReturn = mutableListOf<String>()
// Jika semua karakter sudah dievaluasi, kembalikan list kosong
if (indices.size == word.length) {
return toReturn.apply { add("") }
}
// Iterasi satu per satu karakter untuk menemukan permutasi
for (i in 0 until word.length) {
// Abaikan jika index sudah dievaluasi
if (indices.contains(i)) continue
// Buat dan kumpulkan list dari index-index yang sudah dievaluasi
val newIndices = mutableListOf<Int>()
for (index in indices) {
newIndices.add(index)
}
// Tambahkan index saat ini
newIndices.add(i)
// Dapatkan permutasi dengan metode rekursif
val permutations = getPermutations(word, newIndices)
// Tambahkan karakter saat ini sebelum tiap-tiap permutasi string yang sudah didapatkan
permutations.forEach {
toReturn.add("${word[i]}$it")
}
}
return toReturn
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment