Find Numbers with Even Number of Digits 〜leetcode〜


〜問題文〜

Given an array nums of integers, return how many of them contain an even number of digits.


Example 1:

Input: nums = [12,345,2,6,7896]
Output: 2
Explanation: 
12 contains 2 digits (even number of digits). 
345 contains 3 digits (odd number of digits). 
2 contains 1 digit (odd number of digits). 
6 contains 1 digit (odd number of digits). 
7896 contains 4 digits (even number of digits). 
Therefore only 12 and 7896 contain an even number of digits.
Example 2:

Input: nums = [555,901,482,1771]
Output: 1 
Explanation: 
Only 1771 contains an even number of digits.


Constraints:

1 <= nums.length <= 500
1 <= nums[i] <= 10^5

引用元: https://leetcode.com/problems/find-numbers-with-even-number-of-digits/
  

〜1時間かけて私が作った回答の残骸😇〜


# @param {Integer[]} nums
# @return {Integer}
def find_numbers(nums)
    nums.each do |i|
        nums_count = nums.length
        num_count = i.length 
        array = []
        (0..nums_count).each do |n|
            while 0 != (num_count-1) do
              arreay [num_count] 


            end
             array =  
        end
    end
  end
  return #偶数の数
end

# nums = [555,901,482,1771]
# find_numbers(nums)



# 555 => 5,5,5 =>  5%2 != 0(奇数) ・ 5%2 == 0(偶数)

# 数字の配列nums
# 偶数の数字の数を返しなさい
#  nums<i<
# 10**(num_count-1)

今できる精一杯のコーディングでした。悔いはありません。。。。😇

他の人の回答例(正解ではない)

さっき気づいたんですけど、leetcode の problem / discussって 「正 解」 じゃないんですね 笑
高確率でエラーが起こります 笑
なので他の人の回答を見て参考にしつつ、改善案と気づきを書いていくことにします。

def find_numbers(nums)
  keepers = []
  nums.each do |n|
      if n.to_s.length % 2 == 0
          keepers.push(n)
      end
  end
   return keepers.count
end

回答例引用元(一部改変):
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/499246/Simple-Ruby-solution

以下、上記回答の分解分析

1. メソッドの定義


def find_numbers(nums)

         〜省略〜

end

「find_numbers」というメソッドを定義。
仮引数=「nums」と定義する。

2. メソッドの処理


    keepers = []

空の配列「keepers」を定義する。



    nums.each do |n|

        〜省略〜

    end

 配列numsの要素数ごとに繰り返し処理をする。
 ブロック変数を「n」として、繰り替えじ処理を行う。



      if n.to_s.length % 2 == 0
          keepers.push(n)
      end

【if】
もし、n.to_s.length % 2 == 0 (数字の文字数が偶数) であったら、配列 「target」 に 「x(=nums[indx])」を加算していく。

【else】
そうでなければ何もしない(処理なし)。

↑きっとここがおかしいポイント!

👌本来は、分解した一桁の整数が偶数の物をカウントしなければならない。
(例:243 → [2,4,3]→偶数は2つ)

🙈しかし、本回答では桁数が偶数かどうか判別しているコードになっている。
(例:243 → [2,4,3]→桁数は「偶数じゃない」)



   return keepers.count

keepers.countでkeepersの文字数を返す。