8、字符串转换整数(atoi)-cangjie
·
题目
思路
1、创建字符数组,定义结果变量 ans 为 0,符号变量 符号 初始化为 1(表示正数),以及一个标志 onlyNum 用于指示是否已经读取到数字。
2、遍历,如果 onlyNum 为 true,继续处理数字:如果当前字符是数字,将其转为相应的整数并累加到 ans,并每次乘以 10 来构建完整数字,返回前检查是否超出 Int32 的范围。
3、如果 onlyNum 为 false:
- 忽略空格。
- 如果是负号,设置符号为 -1,并将 onlyNum 设置为 true。
- 如果是正号,设置符号为 1,并将 onlyNum 设置为 true。
- 如果是数字,设置符号为 1,更新 ans 并设置 onlyNum 为 true。
- 遇到其他无效字符时终止处理。
代码
class Solution {
func myAtoi(s: String): Int64 {
var rArr = s.toRuneArray()
var ans:Int64 = 0
var 符号 = 1
var onlyNum = false
for(r in rArr){
if(onlyNum){
if(r <= r'9' && r >= r'0'){
ans *= 10
ans += Int64(UInt32(r) - UInt32(r'0'))
// println("r = ${r}, ans = ${ans}")
if(ans > Int64(Int32.Max)){
if(符号 > 0){
return Int64(Int32.Max)
}
else{
return Int64(Int32.Min)
}
}
}
else{
break
}
}
else{
if(r == r' '){
// do nothing
}
else if(r == r'-'){
符号 = -1
onlyNum = true
}
else if(r == r'+'){
符号 = 1
onlyNum = true
}
else if(r <= r'9' && r >= r'0'){
符号 = 1
onlyNum = true
ans += Int64(UInt32(r) - UInt32(r'0'))
}
else{
break
}
}
}
return ans * 符号
}
}
复杂度
时间复杂度:O(n)
空间复杂度:O(n)
遇到的坑
1、string不能slice,必须转arr
结果
更多推荐




所有评论(0)