String to number conversion in Kotlin - Time & Space Complexity
When converting a string to a number, the time it takes depends on the length of the string.
We want to know how the work grows as the string gets longer.
Analyze the time complexity of the following code snippet.
fun stringToInt(s: String): Int {
var result = 0
for (char in s) {
val digit = char - '0'
result = result * 10 + digit
}
return result
}
This code converts a string of digits into an integer by processing each character one by one.
- Primary operation: Looping through each character in the string.
- How many times: Exactly once for each character in the input string.
As the string gets longer, the number of steps grows in a straight line with the length.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 steps |
| 100 | About 100 steps |
| 1000 | About 1000 steps |
Pattern observation: Doubling the string length roughly doubles the work done.
Time Complexity: O(n)
This means the time to convert grows directly with the length of the string.
[X] Wrong: "Converting a string to a number takes the same time no matter how long the string is."
[OK] Correct: Each character must be read and processed, so longer strings take more time.
Understanding how string length affects conversion time helps you explain efficiency clearly and shows you know how input size matters in real code.
"What if we changed the code to convert a string to a floating-point number with decimals? How would the time complexity change?"
Practice
String to an Int?Solution
Step 1: Understand the conversion functions
Kotlin providestoInt()to convert strings to integers,toDouble()for doubles, andtoString()converts other types to strings.Step 2: Identify the correct function for String to Int
Since the question asks for converting aStringto anInt,toInt()is the correct function.Final Answer:
toInt() -> Option DQuick Check:
String to Int = toInt() [OK]
- Confusing toInt() with toString()
- Using toDouble() when integer is needed
- Trying to convert non-numeric strings without error handling
"123" to an integer?Solution
Step 1: Check Kotlin syntax for string to int conversion
The correct syntax is callingtoInt()on the string object, like"123".toInt().Step 2: Analyze each option
val num = "123".toInt() uses the correct method call. Options B and C are invalid function calls in Kotlin. val num = "123".toInteger() uses a non-existent methodtoInteger().Final Answer:
val num = "123".toInt() -> Option CQuick Check:
Correct syntax = "123".toInt() [OK]
- Trying to call toInt() as a standalone function
- Using Java-like Integer.parseInt() syntax
- Using non-existent methods like toInteger()
val s = "45" val n = s.toInt() + 10 println(n)
Solution
Step 1: Convert string to integer and add
The string "45" is converted to integer 45 usingtoInt(). Then 10 is added, resulting in 55.Step 2: Print the result
Theprintln(n)outputs the integer 55, not string concatenation.Final Answer:
55 -> Option AQuick Check:
45 + 10 = 55 [OK]
- Thinking + concatenates strings here
- Expecting output '4510' instead of 55
- Ignoring toInt() conversion effect
val s = "abc" val n = s.toInt() println(n)
Solution
Step 1: Understand toInt() behavior on invalid strings
CallingtoInt()on a string that is not a valid number throws aNumberFormatExceptionat runtime.Step 2: Analyze the given string "abc"
Since "abc" cannot be converted to an integer, the program will crash with a runtime exception.Final Answer:
Runtime exception due to invalid number format -> Option BQuick Check:
Invalid string toInt() causes runtime error [OK]
- Expecting toInt() to return 0 for invalid strings
- Thinking toInt() throws compile-time error
- Ignoring exception possibility
listOf("10", "20", "abc", "30"). Which Kotlin code safely converts valid strings to integers and ignores invalid ones?Solution
Step 1: Understand safe conversion with toIntOrNull()
toIntOrNull()returns null if conversion fails, avoiding exceptions.Step 2: Use mapNotNull to convert and skip nulls
mapNotNull { it.toIntOrNull() }converts valid strings and removes nulls from invalid ones.Step 3: Analyze other options
list.map { it.toInt() } throws exception on "abc". list.filter { it.toInt() > 0 } tries to convert without safety and filters by value, causing error. list.filterNotNull().map { it.toInt() } filters non-null strings but does not handle invalid numbers.Final Answer:
list.mapNotNull { it.toIntOrNull() } -> Option AQuick Check:
Safe conversion uses toIntOrNull() + mapNotNull [OK]
- Using toInt() directly causing exceptions
- Filtering strings before conversion incorrectly
- Not handling null results from toIntOrNull()
Ready to prove it?
Pass the test and this pattern moves unknown
