美文网首页
8.字符串转换整数

8.字符串转换整数

作者: 寂灭天骄小童鞋 | 来源:发表于2020-03-04 14:05 被阅读0次

https://leetcode-cn.com/problems/string-to-integer-atoi/

func myAtoi(_ str: String) -> Int {
    if str.count <= 0 {return 0}
    var result = 0
    var numLength = 0
    var minusTimes = 0
    var minusFlag = 0
    for (_, char) in str.enumerated() {
        if (char == "-" || char == "+") && numLength == 0 {
            //正负号
            minusTimes = minusTimes + 1
            minusFlag = char == "-" ? 1 : 0
        } else if (isValidNumStr(char) && minusTimes < 2) {
            //+ - 只出现一次  其余全数字
            result = result * 10 + changeNumValue(char)
            numLength = numLength + 1
            if result - 1 > Int32.max {break}
        } else if (char == " " && numLength == 0 && minusTimes == 0) {
            //一直空格
            continue
        } else {
            //其他非数字
            break
        }
    }
    if minusFlag == 1 {
        return -result < Int32.min ? Int(Int32.min) : -result
    }
    return result > Int32.max ? Int(Int32.max) : result
}

func isValidNumStr(_ firstStr: Character) -> Bool {
    if firstStr == "0" || firstStr == "1" || firstStr == "2" || firstStr == "3" || firstStr == "4" || firstStr == "5" || firstStr == "6" || firstStr == "7" || firstStr == "8" || firstStr == "9" {
        return true
    } else {
        return false
    }
}

func changeNumValue(_ str: Character) -> Int {
    var result = 0
    switch str {
    case "0":
        result = 0
    case "1":
        result = 1
    case "2":
        result = 2
    case "3":
        result = 3
    case "4":
        result = 4
    case "5":
        result = 5
    case "6":
        result = 6
    case "7":
        result = 7
    case "8":
        result = 8
    case "9":
        result = 9
    default:
        result = 0
    }
    return result
}

相关文章

网友评论

      本文标题:8.字符串转换整数

      本文链接:https://www.haomeiwen.com/subject/fysvlhtx.html