LeetCodeでRubyとアルゴリズムを学びたい#2【66. Plus One】

今回の問題が「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を足して、返すだけなので簡単に実装できそうです。

66. Plus One | LeetCode


こんな感じの関数を作ります。

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]

Written by@Ryutaro
日々学習した技術系のアウトプットをしていきます。学習内容: Ruby, Ruby on Rails, Go, TypeScript, Docker

GitHub