使用kotlin完成这个题目:剑指 Offer 20. 表示数值的字符串 中等 477 相关企业 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 若干空格 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 下述格式之一: 至少一位数字,后面跟着一个点 '.' 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 一个点 '.' ,后面跟着至少一位数字 整数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 '-') 至少一位数字 部分数值列举如下: ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"] 部分非数值列举如下: ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"] 示例 1: 输入:s = "0" 输出:true 示例 2: 输入:s = "e" 输出:false 示例 3: 输入:s = "." 输出:false 示例 4: 输入:s = " .1 " 输出:true 提示: 1 <= s.length <= 20 s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.' 。
时间: 2023-11-22 16:56:49 浏览: 37
```kotlin
fun isNumber(s: String): Boolean {
var i = 0
val n = s.length
// 去除空格
while (i < n && s[i] == ' ') {
i++
}
if (i < n && (s[i] == '+' || s[i] == '-')) {
i++
}
var isNumeric = false
// 判断整数部分
while (i < n && s[i].isDigit()) {
i++
isNumeric = true
}
if (i < n && s[i] == '.') {
i++
// 判断小数部分
while (i < n && s[i].isDigit()) {
i++
isNumeric = true
}
}
if (isNumeric && i < n && (s[i] == 'e' || s[i] == 'E')) {
i++
isNumeric = false
if (i < n && (s[i] == '+' || s[i] == '-')) {
i++
}
while (i < n && s[i].isDigit()) {
i++
isNumeric = true
}
}
// 去除空格
while (i < n && s[i] == ' ') {
i++
}
// 判断是否遍历到末尾
return isNumeric && i == n
}
```