LeetCode答題記錄640. 求解方程

求解一個給定的方程,將x以字符串"x=#value"的形式返回。該方程僅包含'+',' - '操作,變量 x 和其對應(yīng)系數(shù)。
如果方程沒有解,請返回“No solution”。
如果方程有無限解,則返回“Infinite solutions”。
如果方程中只有一個解,要保證返回值 x 是一個整數(shù)。

解析字符串,按照普通的解方程手法進(jìn)行

let index:String.Index = equation.index(of: "=")!
    let leftStr = equation[..<index]
    let rightStr = equation[equation.index(after: index)...]
    var leftNum: Int = 0
    var leftX: Int = 0
    var tempStr: String = ""
    for aChar in leftStr {
        if aChar == "x" {
            if tempStr.isEmpty {
                leftX += 1
            }else {
                if tempStr.last == "+" || tempStr.last == "-" {
                    tempStr += "1"
                }
                leftX += Int(tempStr)!
                tempStr = ""
            }
        }else if aChar == "+" || aChar == "-" {
            if !tempStr.isEmpty {
                leftNum += Int(tempStr)!
            }
            tempStr = String(aChar)
        }else {
            tempStr += String(aChar)
        }
    }
    if !tempStr.isEmpty {
        leftNum += Int(tempStr)!
        tempStr = ""
    }
    var rightNum: Int = 0
    var rightX: Int = 0
    for aChar in rightStr {
        if aChar == "x" {
            if tempStr.isEmpty {
                rightX += 1
            }else {
                if tempStr.last == "+" || tempStr.last == "-" {
                    tempStr += "1"
                }
                rightX += Int(tempStr)!
                tempStr = ""
            }
        }else if aChar == "+" || aChar == "-" {
            if !tempStr.isEmpty {
                rightNum += Int(tempStr)!
            }
            tempStr = String(aChar)
        }else {
            tempStr += String(aChar)
        }
    }
    if !tempStr.isEmpty {
        rightNum += Int(tempStr)!
    }
    leftX = leftX - rightX
    rightNum = rightNum - leftNum
    var rstStr = ""
    if leftX == 0 {
        if rightNum == 0 {
            rstStr = "Infinite solutions"
        }else {
            rstStr = "No solution"
        }
    }else {
        let rstNum = Double(rightNum) / Double(leftX)
        var rstInt = Int(rstNum)
        if rstNum < Double(rstInt) {
            rstInt -= 1
        }
        rstStr = "x=\(rstInt)"
    }
    return rstStr
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容