8. String to Integer (atoi)_Swift

难度

简单

题目

将字符串转为整型,需注意各种特殊字符情况的处理。时间复杂度为:O(n)。

思路

思路一

写好 case 。。。

代码

方法一

func myAtoi(_ str: String) -> Int {
    
    let chars = [Character](str)
    
    var result = 0
    var sign = 0
    var isPrefix = true
    
    for char in chars {
        // 1. 先判断字符串前面的空格
        if char == " " && isPrefix {
            continue
        }
        
        isPrefix = false
        
        // 2. 判断正负号
        if char == "+" || char == "-" {
            if sign != 0 {
                break
            }
            sign = char == "+" ? 1 : -1
            continue
        }
        
        // 3. 判断合理的值
        if char >= "0" && char <= "9" {
            let charValue = Int(String(char))!
            
            // 3.1 大于最大值
            if sign >= 0 && result > ((Int(Int32.max) - charValue) / 10) {
                return Int(Int32.max)
            }
            
            // 3.2 小于最小值
            if sign == -1 && -result < (Int(Int32.min) + charValue) / 10  {
                return Int(Int32.min)
            }
            
            // 3.3 正常值
            result = result * 10 + charValue
        } else {
            break
        }
    }
    
    sign = sign == 0 ? 1 : sign
    
    return result * sign
}

你可能感兴趣的:(8. String to Integer (atoi)_Swift)