August 19, 2020
今回の問題が**「Plus One」**という問題に挑戦しました。
次のような整数の配列が渡されるので、+ 1
して返す関数を作るというのが問題です。
Example 1:
Input: [1, 2, 3]
Output: [1, 2, 4]
Example 2:
Input: [4, 3, 2, 1]
Output: [4, 3, 2, 2]
Example 3:
Input: [9, 9]
Output: [1, 0, 0]
渡された配列を整数に変換して1
を足して、返すだけなので簡単に実装できそうです。
こんな感じの関数を作ります。
def plus_one(digits)
# ...
end
plus_one([1, 2, 3]) #=> [1, 2, 4]
+ 1
して型を変換して返す処理の手順をステップ毎に分割すると次のようなイメージです。
Input
[1, 2, 3].join
↓
"123".to_i
↓
123
↓
124 = 123 + 1
↓
124.to_s
↓
"124".chars
↓
["1", "2", "4"].map(&:to_i)
↓
Output
[1, 2, 4]
結合、型変換、分割だらけの実装になってしまいました。
def plus_one(digits)
(digits.join.to_i + 1).to_s.chars.map(&:to_i)
end
渡された配列を結合して整数に変換して+ 1
する
# [1, 2, 3] -> "123" -> 123 + 1 -> 124
(digits.join.to_i + 1) #=> 124
あとは+ 1
された整数を配列に戻して返すだけです。
# 124 -> "124" -> ["1", "2", "3"] -> [1, 2, 4]
124.to_s.chars.map(&:to_i) #=> [1, 2, 4]