LoginSignup
1
3

More than 5 years have passed since last update.

面接で絶対に押さえておきたいアルゴリズム問題(2)

Last updated at Posted at 2017-06-27

問題: Reverse Integer

渡される整数を逆にして返せよ。
ルール: 入力値は 32-bit 符号あり整数(32-bit signed integer) でなければいけない。32-bitを超えた場合は、0を返せ。

例)
Example1: x = 123, return 321
Example2: x = -123, return -321
Example3: x = 1534236469, return 0

ヒント)
32-bit整数のサイズはどうやって割り出す?

32-bitのMAX値は 2,147,483,647 で
32-bitのMIN値は -2,147,483,648 だけど、

swiftにはMAXとMIN値を取得する関数がある。
参考:http://www.codingexplorer.com/integers-and-numeric-literals-in-swift/

解答例

この方のJavaコードを参考にしました〜
https://discuss.leetcode.com/user/flyflybird

func reverse(_ x: Int) -> Int {


    let maxValue:Int = Int(Int32.max)
    let minValue:Int = Int(Int32.min)

    let sign = x < 0 ? -1:1
    var x = abs(x)
    var reversed = 0

    while x != 0{

        print("\(reversed * 10) + \(x % 10) = \(reversed * 10 + x % 10)")
        reversed = reversed * 10 + x % 10

        x = x / 10

        print(x)

        if reversed * sign > maxValue || reversed * sign < minValue {
            return 0
        }        
    }

    return reversed * sign
}

コンソールログ

入力値が 1534236469 だったとして
print("(reversed * 10) + (x % 10) = (reversed * 10 + x % 10)")
print(x)
が吐き出した内容は以下です!

0 + 9 = 9
153423646
90 + 6 = 96
15342364
960 + 4 = 964
1534236
9640 + 6 = 9646
153423
96460 + 3 = 96463
15342
964630 + 2 = 964632
1534
9646320 + 4 = 9646324
153
96463240 + 3 = 96463243
15
964632430 + 5 = 964632435
1
9646324350 + 1 = 9646324351
0

さらにわかりやすくした図

Screen Shot 2017-06-26 at 6.21.08 PM.png

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3