class Solution {
fun myAtoi(s: String): Int {
val one = deleteLeadingWhiteSpaces(s)
if (one == "") return 0
val two = checkNextCharacter(one)
val three = readUntilNonDigit(two.second)
val four = convertDigitIntoInteger(three, two.first)
return four
}
private fun deleteLeadingWhiteSpaces(s: String): String {
var localI = 0
for (i in s.indices) {
if (s[i] == ' ') {
localI = i + 1
} else {
break
}
}
return s.substring(localI)
}
private fun checkNextCharacter(s: String): Pair<Char, String> {
var sign: Char? = null
if (s[0] == '+' || s[0] == '-') {
sign = s[0]
}
if (sign == null) return Pair('+', s)
return Pair(sign, s.substring(1))
}
private fun readUntilNonDigit(s: String): String {
var localI = 0
for (i in s.indices) {
if (s[i].isDigit()) {
localI = i + 1
} else {
break
}
}
return s.substring(0, localI)
}
private fun convertDigitIntoInteger(s: String, sign: Char): Int {
var localSum: Long = 0
for (i in s.indices) {
localSum *= 10
localSum += s[i].digitToInt()
if (sign == '+') {
if (localSum >= Int.MAX_VALUE) {
return Int.MAX_VALUE
}
} else {
if (localSum > Int.MAX_VALUE) {
return Int.MIN_VALUE
}
}
}
return if (sign == '+') {
localSum.toInt()
} else {
-localSum.toInt()
}
}
}