【LeetCode】Easy: Reverse Integer


Reverse Integer

https://leetcode.com/problems/reverse-integer/

自分の回答

Swift

🤦 Wrong Answer

class Solution {
    func reverse(_ x: Int) -> Int {
        
        var xx: Int = x
        var array = [Int]()
        
        while xx != 0 {
            array.append(xx % 10)
            xx = xx / 10
        }
        
        return array.reversed().enumerated().reduce(into: 0) { (result, iterator) in
            result += iterator.element * Int(pow(10, Double(iterator.offset)))
        }
    }
}

オーバーフローの考慮ができていなかった。

回答例

https://leetcode.com/problems/reverse-integer/solution/

  • pop, push で考える
  • 32bitでオーバーフローしたら0を返す方法を探す

回答例を見て修正

class Solution {
    func reverse(_ x: Int) -> Int {
        
        var x: Int = x
        var output: Int32 = 0
        
        while x != 0 {
            let pop: Int = x % 10
            x = x / 10
            let multiply = output.multipliedReportingOverflow(by: 10)
            if multiply.overflow { return 0 }
            let add = multiply.partialValue.addingReportingOverflow(Int32(pop))
            if add.overflow { return 0 }
            output = add.partialValue
        }
        
        return Int(output)
    }
}

f:id:hira22_1:20200604094456p:plain

感想

  • 難しかった

参考